Intereting Posts
Есть ли способ для службы systemd найти путь к устройству и перезапустить его, если он изменится? Разница в выполнении init со встроенными или внешними initramfs? Как запустить программу, которая имеет собственную командную строку в программе сценария оболочки проблемы печати с принтером DDST (aka PCL6) RICOH Aficio SP C240DN Программно получить подробное использование процессоров, например top / htop Виртуальный порт rawsidi Alsa получит только первый и последний MIDI-байты любого сообщения Как настроить компакт-диски с поддержкой доверия перезагрузка в середине скрипта Как установить SL5? Ошибка при установке дисков В стандарте UNIX требуются файловые системы, чувствительные к регистру? GIT на «горном льве» не будет выполнять команды Bash – Как сократить имя пользователя в PS1 Как навсегда переделать кепку в esc в X11? Как использовать ffmpeg для разделения видео MPEG на 10-минутные куски?

Замена зашифрованного пароля

У меня есть зашифрованные пароли, специфичные для каждой среды. У него есть специальные символы. Ниже приведен пример среды разработки (с косой чертой)

$$Param_INFA_USER=USR_DF $$Param_INFA_PASS=1OFR6pSbNq/yvLtpxHbC9E9KvloTj5tRGpzr9dCMD7E= v_prst_pwd=`grep -i "\\$\\$Param_INFA_PASS" param_file.parm` | tr -d ' ' v_lbl_pwd=`grep -i "\\$\\$Param_INFA_PASS" param_file.parm | cut -d '=' -f1` sed -i 's/'$v_prst_pwd'/'$v_lbl_pwd'='$envspfc_pwd'/g' param_file.parm sed -is/$$Param_INFA_PASS=**1OFR6pSbNq/yvLtpxHbC9E9KvloTj5tRGpzr9dCMD7E=**/$$Param_INFA_PASS=ABC/g param_file.parm 

Я пытаюсь заменить пароли и получил ниже вопрос.

 sed: -e expression #1, char 74: unknown option to `s' 

Как экранировать специальные символы при замене строки, которая является переменной (не известно о позиции специальных символов).

Значение Param_INFA_PASS , очевидно, равно Base64 . Он может содержать буквы, цифры и символы + , / и = .

Для простого grep ни один из этих символов не является специальным. Помните, что для egrep или grep -E символ + является особенным и должен быть экранирован. Не используйте grep -i : Base64 чувствителен к регистру.

Для sed ни один из этих символов не является особенным, если вы все сделаете правильно. В команде s вы можете использовать любой символ¹ вместо / . Так что выберите тот, который не используется в Base64, например

 sed -e "s~^PASSWORD=$old_password\$~$new_password~g" 

New За исключением новой строки и обратной косой черты.

sed не использует / качестве разделителя.

Из-за примеров мы думаем, что sed использует / в качестве разделителя. Однако он может использовать любой символ.

Например, sed 's/abc/def/' можно записать как sed 's^abc^def^ . То, что всегда следует за s является разделителем.

Если есть символ, который не используется во входном тексте, вы можете использовать его в своих интересах (возможно, выберите непечатный символ).