当也是正则表达式特殊字符时转义 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.
假设我要匹配字符串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.