2011-08-19 142 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