当也是正则表达式特殊字符时转义 sed 定界符

Escape sed delimiter character when also regex special character

假设我要匹配字符串foo.。我的正则表达式是 foo\.,以转义 . 字符的特殊含义。

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

对于 cat 这样的搜索,这很好用。

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

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

但是,它匹配 cat\\.

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

. 用作定界符时,有什么方法可以使文字 . 正常工作吗?

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

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

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

这对我有用:

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