2011-08-19 117 views
3

如何串 sed whole word search and replaceSED整词的搜索和替换

在HP-UX(B.11.31)的sed替换整个单词?

$ echo "bar embarassment" | sed "s/bar/no bar/g"; 

"\bbar\b" does not work 
"\<bar\>" does not work 
"[[:<:]]bar[[:>:]]" does not work 
+0

安装和使用GNU'sed'?使用'perl'来代替?这两个建议都不全面。从历史上看,在HP-UX上构建GCC需要一个非标准版本的'sed'(有效的,GNU'sed'),因为HP提供的版本具有GCC配置脚本无法合理存在的限制。我没有在HP-UX 11.x系统上构建GCC(10.x是最后一次),所以我不知道这是否仍然是问题。 –

回答

1

尝试的sed-r选项与\b

echo "bar embarassment" | sed -r "s/\bbar\b/no bar/g"; 
+0

无法使用:sed:非法选项-r – Toru

1

测试在Solaris,HPUX不

echo "bar embarassment bar foobar bar" | 
sed -e 's/\([^[:graph:]]\)bar$/\1no bar/g' \ 
    -e 's/\([^[:graph:]]\)bar\([^[:graph:]]\)/\1no bar\2/g' \ 
    -e 's/^bar\([^[:graph:]]\)/no bar\1/g' 

发出

no bar embarassment no bar foobar no bar 
+0

由于图形字符是可见的,因此包含标点符号,因此'[:alnum:]'会比'[:graph:]更好吗? –

+0

也许吧。取决于OP对“整个词”的定义,特别是下划线是一个[[:punct:]'字符。 –

0

如果你在vim中,你可以使用这个命令:

:% s/\<old\>/new/g