如何逃避" (和特殊字符逃脱

时间:2018-01-31 16:50:01

标签: bash sed

我正在尝试使用sed进行以下模式替换,但它一直告诉我它无法找到模式。我不知道逃避的正确组合使其发挥作用。

sed -i -e s_('DB_SOURCE', 'demo')_('DB_SOURCE', 'local')_ sedTest

1 个答案:

答案 0 :(得分:3)

您需要转义涉及(),空白字符和'(单引号)的所有元字符,并将分隔符更改为{{ 1}}超过#

_

或者在双引号(sed -e s#\(\'DB_SOURCE\',\ \'demo\'\)#\(\'DB_SOURCE\',\ \'local\'\)# file )中使用整个替换。确保搜索或替换文本不包含",因为该变量可以在双引号下插值。在这种情况下,只需向其添加一个转义($

\$

正如三人在评论中指出的那样,这里有两个层次的解释,一个是sed,另一个是shell本身。在shell中,单引号之间的所有内容都按字面解释,除了单引号本身。 Sed使用基本的正则表达式。在BRE中,字符sed "s#('DB_SOURCE', 'demo')#('DB_SOURCE', 'local')#" file 需要在前面用反斜杠引用。