2013-01-24 225 views
0

我有如下一個sample.txt的文件:正則表達式找到一個詞

1.hi _plane_ is 
2.hi airplane is 
3.hi plane is 
4.hi _plane- is 
5.hi :plane: is 
plane 
there is a plane here 

我想找到一個詞「平面」不是內部的其他詞,說「飛機」, 這樣的grep後,輸出將只是如下面(僅第2行,將過濾掉)

1.hi _plane_ is 
3.hi plane is 
4.hi _plane- is 
5.hi :plane: is 
plane 
there is a plane here 

我嘗試:

grep -w "plane" sample.txt 
grep "\bplane\b\|\Bplane\B" sample.txt 

卜輸出與我所期望的不相符。 實際上我應該如何使用grep來獲得正確的結果?

非常感謝。

回答

2
egrep -v '[[:alpha:]]+plane|plane[[:alpha:]]+' 
+0

這完全是我想要的,非常感謝 – CSJ

0

試試這個:

grep "(^|[^a-zA-Z])plane([^a-zA-Z]|$)" sample.txt 

\b的問題是,下劃線_算作一個 「單詞字符」,所以\bplane\b不符_plane_

+1

但這會丟掉第6行僅「飛機」 – CSJ

+0

@ CSJ沒有注意到一個 - 我相應地修復了正則表達式。看到新版本的正則表達式 – Bohemian

0

隨着GNU grep

grep -w plane sample.txt 

從頭開始的; grep -w將下劃線作爲單詞的一部分,所以在這種情況下它並不好。