Хорошо, давайте предположим, что у вас есть этот файл:
$ cat outputfile
commonpassword
AsecretPassword$
abc123
Если бы вы контролировали значение шаблона, вы могли бы просто избежать знака доллара:
$ sed 's,AsecretPassword\$,ChangeMe,g' outputfile
commonpassword
ChangeMe
abc123
Увы, у нас нет, но мы можем использовать sed для экранирования значения переменной:
$ echo $PASSWORD | sed -e 's/\$/\\$/g'
AsecretPassword\$
К счастью, мы можем получить выходные данные одной команды как часть другой, используя подстановка команд :
$ echo "Command substitution: $(echo $PASSWORD | sed -e 's/\$/\\$/g') Cool, right?"
Command substitution: AsecretPassword\$ Cool, right?
... поэтому нам просто нужно сделать это по нашей исходной команде!
$ sed "s,$(echo $PASSWORD| sed -e 's/\$/\\&/g'),ChangeMe,g" outputfile
commonpassword
ChangeMe
abc123
В этом случае мы только что избежали одного специального символа. Есть еще несколько слов о sed, поэтому эти вопросы и ответы могут быть полезны в общем случае.