Конечная цель — заменить строку, содержащую пароль (который может содержать любой символ) в файле:
...
passw=old#$#$@$#@%{}[]
...
У меня есть строковые переменные с заменами: (пока не обращайте внимания на двойные кавычки)
$old="passw=old#$#$@$#@%{}[]"
$new="passw=new#$#$@$#@%{}[]"
Если я использую простой sed -i "s#$old#$new#g" file.txt"
, он, очевидно, не работает должным образом, поскольку специальные символы нарушают синтаксис.
Чтобы это работало, мне нужно экранировать все специальные символы с помощью \
, например: \[
Я пытался использовать что-то вроде этого:
esc=$("$old" | sed 's/[][`~!@#$%^&*()-_=+{}\|;:",<.>/?'"'"']/\\&/g'
Однако это дает мне следующую ошибку:
sed: -e expression #1, char42: Invalid range end
Любая помощь будет принята с благодарностью!