2012-10-03 168 views
1

我有一個要求來搜索一個確切的單詞並打印一行。如果我沒有任何.(點),它正在工作。使用grep匹配確切的單詞

$cat file 
test1 ALL=ALL 
w.test1 ALL=ALL 

$grep -w test1 file 
test1 ALL=ALL 
w.test1 ALL=ALL 

這是給第二行也,我想只能用確切的詞test1線。

+1

它應該是'grep -e'(^ |)test1(| $)'file',也許?我對你在這裏的'確切的詞'所指的含義有點困惑;因爲,是的,'w.test'與''[[:<:]]test1[[:>:]]'模式相匹配。 – raina77ow

回答

5

試試這個:

grep -E "^test1" file 

這說明,任何以單詞TEST1作爲第一行開始。現在,如果你需要在行的中間找到它,那麼這是行不通的,但是你對此沒有特別的瞭解。至少在給出^的例子中會起作用。

+0

謝謝,邏輯的作品,如果這個詞是行的開始詞。如果單詞位於我們正在搜索的行的中間,是否有任何選項? –

+0

這個grep也會匹配從test1開始的單詞。例如TEST12。在任何情況下,raina77ow的評論是在文件的開始,中間或結尾匹配單詞的完整正則表達式。 'grep -e'(^ |)test1(| $)'file' – Matt

3

爲您的樣品,你可以在正則表達式

grep "^test1\s" file 

這取決於你可能需要匹配以及什麼其他的分隔符與\s指定用^線和空間的開始。

0

我知道我是遲了,但我發現這個問題,並認爲應答。 A 單詞被定義爲一個字符序列並以空格分隔。 所以我認爲這會工作 的grep -E「+測試1 |^test1的」文件


這個搜索與test1的或有測試由至少一個空格開頭行開始的行。對不起,我可以找到一個更好的方式,如果有人可以請糾正我:)

+0

它也會匹配'test11'。我會建議使用-w(word grep選項):grep -w test1 – grundic

0

您可以採取以下作爲示例測試文件。下面的正則表達式

$cat /tmp/file 
test1 ALL=ALL  
abc test1 ALL=ALL  
    test1 ALL=ALL  
w.test1 ALL=ALL  
testing w.test1 ALL=ALL 

運行搜索開始TEST1一個單詞並且在線路也之間有一個字TEST1的線。

$ grep -E '(^|\s+)test1\b' /tmp/file 
test1 ALL=ALL  
abc test1 ALL=ALL 
    test1 ALL=ALL