2012-05-15 25 views
1

我使用sed查找和替換的物品,如:如何使用sed來查找和替換項目,只有當匹配不是由字母或數字約束?

sed -i 's/fish/bear/g' ./file.txt 

我想這個限制只改變不前或之後有一個字母或數字的項目,如:

  • The fish ate the worm.會改變,因爲只有空格在之前和之後。
  • The lionfish ate the worm.不會改變,因爲在fish之前有一個字母。

如何查找和替換某些項目,但是如果至少有一個字母或數字出現在前後,該怎麼辦?

回答

2

fish之前和之後使用否定字符類,如下所示:\(^\|[^[:alnum:]]\)fish\($\|[^[:alnum:]]\)。這是說:

  1. 開始行或任何非字母數字的
  2. 其次是行尾或任何非字母數字其次

這保證了字符後,立即前和緊接在fish之後的字母不是字母數字。

sed 's/\(^\|[^[:alnum:]]\)fish\($\|[^[:alnum:]]\)/\1bear\2/g' 
1

檢查字符串前面和後面的字符。如果它在開始或結束時,將不會有人物來檢查,所以也要檢查。

sed -i 's/\(^\|[^[:alnum:]]\)fish\($\|[^[:alnum:]]\)/\1bear\2/g' 
3

使用單詞邊界逃逸:

sed -i 's/\<fish\>/bear/g' inputfile 

sed某些版本可能不支持此功能。

+0

+1此外'sed -i's/\ bfish \ b/bear/g'inputfile'也可以。 – potong

相關問題