通常,当人们想要使用包含unknown option to s'
分隔符的模式时,人们会抱怨sed
中的sed
错误。
例如,如果我们使用/
:
$ var="hel/lo"
$ sed "s/a/$var/g" <<< "haha"
sed: -e expression #1, char 9: unknown option to `s'
因此,我们建议使用另一个定界符,例如
|
:$ sed "s|a|$var|g" <<< "haha"
hhel/lohhel/lo
但是,我想知道
sed
可以接受的分隔符是什么...因为它似乎几乎是任何字符,包括类似于正则表达式的字符(*
,?
,.
,...)!在我的
sed (GNU sed) 4.2.2
中:$ sed 's/a/b/g' <<< "haha"
hbhb
$ sed 's_a_b_g' <<< "haha"
hbhb
$ sed 's#a#b#g' <<< "haha"
hbhb
$ sed 's$a$b$g' <<< "haha"
hbhb
$ sed 's?a?b?g' <<< "haha"
hbhb
$ sed 's*a*b*g' <<< "haha"
hbhb
$ sed 's-a-b-g' <<< "haha"
hbhb
$ sed 's.a.b.g' <<< "haha"
hbhb
$ sed 'sXaXbXg' <<< "haha"
hbhb
$ sed 'sxaxbxg' <<< "haha"
hbhb
$ sed 's1a1b1g' <<< "haha"
hbhb
即使
a
在这里也可以转义:$ sed 'saaabag' <<< "haha"
sed: -e expression #1, char 5: unknown option to `s'
$ sed 'sa\aabag' <<< "haha"
hbhb
有什么规范吗?
最佳答案
也许是最接近标准的POSIX / IEEE开放组基础规范says:
[2addr] s / BRE /替换/标志
将替换字符串替换为BRE实例中的
模式空间。反斜杠或换行符以外的任何字符都可以
用来代替斜线来分隔BRE和替换。
在BRE及其替换中,BRE分隔符本身可以是
如果前面加上反斜杠,则用作文字字符。”
关于sed - 您可以在sed中使用哪些定界符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33914360/