当regex特殊字符时,逃脱sed分隔符字符

时间:2015-07-14 19:13:07

标签: regex sed escaping delimiter

说我想要匹配字符串foo.。我的正则表达式是foo\.,以逃避.字符的特殊含义。

现在说在我的sed命令中,我使用.作为分隔符。

对于像cat这样的搜索,这样可以正常工作。

echo cat | sed 's.cat.dog.g'

但是当我的搜索字符串中有文字.时,我遇到了问题。我想,由于.是我的分隔符,我的正则表达式foo\.应该变为foo\\\.。理想情况下,unescaping的第一次传递将由sed将其转换为foo\.,然后将传递给正则表达式引擎。

但相反,它匹配cat\\\.

echo 'cat.' | sed 's.cat\\\..dog.g' # cat.
echo 'cat\.' | sed 's.cat\\\..dog.g' # dog

.用作分隔符时,是否可以使用文字.进行此操作?

我问这个问题因为我希望能够有一个功能

function escapeForExtendedSed ($str, $delimiter = "/") { ... }

可以根据调用者用作分隔符的方式正确转义。

1 个答案:

答案 0 :(得分:1)

这对我有用:

echo 'cat.' | sed 's.cat[\.].dog.g' # cat.