2011-04-21 285 views
1

我試圖grep的一個文件...... 文件我有5個實體的grep不能按預期工作

vivek 
vivek.a 
a.vivek 
vivek_a 
a_vivek 

當我用grep爲grep -iw vivek文件名,那麼就應該給我 vivek只能給它

vivek 
vivek.a 
a.vivek 

回答

1

一組帶字母,下劃線和數字的字符被視爲一個單詞。所以除此之外的其他任何字符都表示字邊界。因此,在「vivek.a」這一行中,點表示單詞的結尾,並且之前的所有字符形成單詞「vivek」,與使用選項-w嘗試匹配的單詞相匹配。

因此,一種方式是這樣定義自己的單詞界限:

$ grep -i -e "[[:space:]]vivek[[:space:]]" -e "^vivek[[:space:]]" -e "[[:space:]]vivek$" -e "^vivek$" file 
+0

hi sahaj這個命令對於 – 2011-04-25 07:11:15

+0

工作正常hi sahaj這個命令對於vivek,vivek_a,a_vivek工作正常,但對於vivek.a和a.vivek,它同時給出了這兩個命令。和_值。我剛剛將vivek替換爲vivek.a vivek_a – 2011-04-25 09:33:32

2

對我來說很好。 .是一個非單詞字符。如果你的意思是別的,那麼你應該使用更具體的正則表達式,而不是使用-w

+0

所以沒有選項,通過它我可以diff的黑/白維韋克第二vivek.a – 2011-04-21 05:21:51

+0

都能跟得上。如果你想有一個錨定正則表達式,然後錨定你的正則表達式。 – 2011-04-21 05:23:28

2

它確實是因爲(這是w選項選擇什麼)的定義,允許.分開的話,雖然_被認爲是一個字的一部分。這個定義對編程語言很有用,但對英文文本不那麼有用。

+0

其實,'_' *被認爲是一個單詞字符。 – 2011-04-21 05:24:24

+0

但在這裏它__選項很好,唯一的問題是。 – 2011-04-21 05:26:28

+0

Sheesh,對不起。我糾正了我的答案。 – wallyk 2011-04-21 06:34:13