我是一种情况,我必须在字符串中替换完全相同的单词。例如:
字符串: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
答案 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]