sed替换单词的完全匹配

时间:2014-11-11 12:41:01

标签: regex replace sed match word

我是一种情况,我必须在字符串中替换完全相同的单词。例如:

字符串:Dog DogCat CatDog Dog Cat Cdog ratdog Dog dog

我尝试过跟随cmd,但它不能正常工作,我使用的是AIX:

echo "Dog DogCat CatDog Dog Cat Cdog ratdog Dog dog " | sed  -i 's/"\<Dog\>"/[[:blank:]]/' 

预期输出:DogCat CatDog Cat ratdog

请帮帮我。

-Hanmant

2 个答案:

答案 0 :(得分:0)

首先,sed -i 'script' file仅在您拥有GNU sed时才有效。你真的在AIX上安装了GNU sed吗?我对此表示怀疑。而且,-i无论如何都没有意义。您正在修改来自管道的流,而不是文件。

其次,POSIX没有指定\<\>,但我知道至少GNU sed和Solaris sed接受它们。另一方面,BSD sed使用[[:<:]][[:>:]]来匹配相同的内容。

如果AIX上的sed接受\<\>分别匹配单词开头和单词结尾,并且它符合POSIX,那么这可能会做什么你想要的:

echo "Dog DogCat CatDog Dog Cat Cdog ratdog Dog dog " | sed 's/\<[Dd]og\>//g'

我也不明白你为什么在s命令的替换部分放置像[[:blank:]]这样的正则表达式结构。替换部分不是正则表达式。

对于POSIX兼容版本:

echo ... | sed 's/ [Dd]og  */ /g; s/^[Dd]og  *//; s/ [Dd]og$//'

答案 1 :(得分:-1)

你知道http://regex101.com/吗?在那里你可以直接测试你的正则表达式字符串...尝试用/ [[:space:]] + /

替换[blank]