Sed有特殊的字符

时间:2018-06-05 01:38:42

标签: regex linux shell sed escaping

如何用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 :(得分:1)

您可以使用以下sed命令:

CMD:

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

解释:

  • 只需使用双引号并在类字符组中添加$,以避免shell将$protection解释为变量
  • 如果您需要修改文件,请将命令更改为:sed -i.back "s/set [$]protection 'enabled';/set \$protection 'disabled';/g",它会备份您的文件并进行就地修改。
  • 如果您想要更改的行中没有其他内容,您还可以将正常句号添加到^和关闭$锚点。 ^set [$]protection 'enabled';$

<强> INPUT:

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

<强>输出:

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

答案 1 :(得分:0)

这可能适合你(GNU sed):

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

将线条更改为所需的值。