我正在尝试使用字边界处的sed替换文本。在查看Beginning and end of words in sed and grep后,我使用:
echo "It is a @ at a@ ." | sed "s/\ba\b/#/g"
输出:在@。
处# @效果很好,但是当我尝试替换以@等特殊字符开头或结尾的单词时,它不起作用。
echo "It is a @ at a@ ." | sed "s/\b@\b/#/g"
输出:在@。
处是 @echo "It is a @ at a@ ." | sed "s/\ba@\b/#/g"
输出:@在 a @ 。
我错过了什么?如何使用sed替换以特殊字符结尾的整个单词?
答案 0 :(得分:2)
您需要使用\B
$ echo "It is a @ at a@ ." | sed "s/\B@\B/#/g"
It is a # at a@ .
\b
- 单词char和非单词char之间的匹配(反之亦然)
\B
- 两个单词字符或两个非单词字符之间的匹配。
因此,@
之前的字符是空格,这是一个非单词字符。因此,要匹配两个非单词字符之间存在的边界,您需要使用\B
,并且@
之后的字符也是空格字符。所以在这里,您还需要使用\B
。
对于第二种情况,你必须使用它,
$ echo "It is a @ at a@ ." | sed "s/\ba@\B/#/g"
It is a @ at # .