2017-04-11 117 views
0

我想用grep獲取包含定義詞的行。我怎樣才能用grep得到整個單詞?

編輯:解決方案是this之一。

我知道我可以使用-w選項,但似乎沒有辦法。

例如:包含由標點符號分隔的我定義的單詞的每個單詞都包含在內。如果我找狗,它會告訴我,不僅含有狗字線也cats.dogs,貓,狗等

# cat file.txt 
some alphadogs dance 
some cats-dogs play 
none dogs dance 
few dog sing 
all cats.dogs shout 

而且使用grep:

# cat file.txt | grep -w "dogs" 
some cats-dogs play 
none dogs dance 
all cats.dogs shout 

所需的輸出:

# cat file.txt | grep -w "dogs" 
none dogs dance 

你知道任何解決方法,可以讓你得到整個單詞嗎?我已使用\ b或\ <對其進行了測試,結果爲負面。

感謝, Eudald

+0

顯示預期輸出 – 123

+2

'用grep -w'顯然不在這裏@triplee工作,就不能複製到當前問題 – Inian

+1

'grep -w'因爲標點和行尾字符的結束/開始被視爲非單詞字符;即使它工作的實施可能會非常緩慢 –

回答

1

用這個詞邊界錨,在grep任何版本已安裝

grep '^dogs$' file.txt 

從這個regular-expressions頁的摘錄,

[..]錨不匹配任何字符。他們匹配一個位置。在字符串的開頭^比賽,並且在字符串的末尾$比賽[..]

+0

你甚至用我提供的例子來測試它嗎?它不起作用 –

+0

@eudald_v:你沒有讓我們知道你的樣本更新,請參閱時間戳。沒問題,你可以試試'grep'[[:space:]] dogs [[:space:]]'file',它可以解決你的問題。讓我們知道它是否是 – Inian

+0

它只能解決示例,如果字符串之前有空格,則在示例中發生,但如果字符串位於句子的開始或結尾,則不會發生。無論如何,我再次編輯問題的答案我終於找到了作品。 –

1

-x參數嘗試:

grep -x dogs file.txt 

grep手冊:

-x,--line-regexp

只選擇那些完全匹配整行的匹配項。 (-x由POSIX指定)。

注:cat是沒用的,當你管本身的輸出爲grep

+0

你甚至用我提供的例子對它進行了測試嗎?它不起作用 –