Сед со специальными символами - PullRequest
0 голосов
/ 05 июня 2018

Как я могу заменить это на sed?Мне нужно заменить это:

set $protection 'enabled';

на

set $protection 'disabled';

Обратите внимание, что я не могу отложить enabled на disabled, потому что он используется не только в этом месте ввходной файл.

Я пробовал это, но ничего не изменилось, но не выдало ошибку:

sed -i "s/set $protection 'enabled';/set $protection 'disabled';/g" /usr/local/openresty/nginx/conf/nginx.conf

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Это может работать для вас (GNU sed):

sed '/^set $protection '\''enabled'\'';$/c set $protection '\''disabled'\'';' file

Измените строку на требуемое значение.

0 голосов
/ 05 июня 2018

Вы можете просто использовать следующую команду sed:

CMD:

sed "s/set [$]protection 'enabled';/set \$protection 'disabled';/g"

Пояснения:

  • Просто используйтесделайте двойную кавычку и добавьте $ в группу символов класса, чтобы ваша оболочка не интерпретировала $protection как переменную
  • Если вам нужно изменить файл, измените команду на: sed -i.back "s/set [$]protection 'enabled';/set \$protection 'disabled';/g" это займетсделайте резервную копию вашего файла и сделайте изменения на месте.
  • Также вы можете добавить начальные ^ и закрывающие привязки $ к своему регулярному выражению, если в строках, которые вы хотите изменить, больше ничего нет.^set [$]protection 'enabled';$

ВХОД:

$ echo "set \$protection 'enabled';"
set $protection 'enabled';

ВЫХОД:

$ echo "set \$protection 'enabled';" | sed "s/set [$]protection 'enabled';/set \$protection 'disabled';/g"
set $protection 'disabled';
...