Bash替换包含单引号和其他字符串的字符串

时间:2016-04-13 09:39:47

标签: bash replace sed

我正在尝试用sed替换字符串。不幸的是,字符串包含单引号和" ::"符号。因此我使用sed遇到了一些麻烦。
我需要将configuration::set('feature', '0')更改为configuration::set('feature', '1')
我尝试了什么:

sed 's%configuration::set('feature', '0')%configuration::set('feature', '1')%g'  file.cf

2 个答案:

答案 0 :(得分:1)

这只是一个报价问题。用双引号括起你的sed命令(如果没有任何bash可以扩展)或者转义里面的所有单引号。

sed 's/configuration::set('"'"'feature'"'"', '"'"'0'"'"')/configuration::set('"'"'feature'"'"', '"'"'1'"'"')/g'

答案 1 :(得分:1)

在整个事物周围使用双引号,以便'不会结束命令字符串并使用捕获组来避免重复:

sed "s%\\(configuration::set('feature', '\\)0'%\\11'%g"  file.cf

根据评论(谢谢),我已将结束报价添加到匹配和替换中,以使其更加强大。由于字符数量太少,我选择反对我自己的建议。