说我想要匹配字符串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 = "/") { ... }
可以根据调用者用作分隔符的方式正确转义。
答案 0 :(得分:1)
这对我有用:
echo 'cat.' | sed 's.cat[\.].dog.g' # cat.