我正在尝试使用sed进行以下模式替换,但它一直告诉我它无法找到模式。我不知道逃避的正确组合使其发挥作用。
sed -i -e s_('DB_SOURCE', 'demo')_('DB_SOURCE', 'local')_ sedTest
答案 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
需要在前面用反斜杠引用。