Переменная SED содержит знак доллара - PullRequest
2 голосов
/ 18 февраля 2020

У меня проблемы с sed, переменная содержит знак доллара, как это ...

PASSWORD='AsecretPassword$'

Я пытаюсь "очистить" и вывести файл пароля с помощью.

sed -i "s,$PASSWORD,ChangeMePassword,g" outputfile.json 

Я перепробовал каждую версию цитат, которую вы можете себе представить. пожалуйста, помогите.

1 Ответ

1 голос
/ 18 февраля 2020

Хорошо, давайте предположим, что у вас есть этот файл:

$ 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, поэтому эти вопросы и ответы могут быть полезны в общем случае.

...