2010-05-21 50 views
44

我使用下面的命令在子目錄到grep東西如何用grep整個字

find . | xargs grep -s 's:text' 

然而,這也發現類似<s:textfield name="sdfsf"...../>

東西,我能做些什麼,以避免所以它只是發現像<s:text name="sdfsdf"/>

或與此有關的東西....也發現<s:text somethingElse="lkjkj" name="lkkj"

基本上s:textname應位於同一行上。

+17

沒有人閱讀標題爲 「如何到grep整個世界** **」? – Earlz 2010-05-21 01:50:13

+1

爲lulz :) – josh 2010-05-21 01:57:58

+7

@Earlz,不,主要是因爲我谷歌搜索「grep整個詞」。 – 2017-02-11 05:05:22

回答

49

您希望-w選項指定它是單詞的結尾。

find . | xargs grep -sw 's:text'

0

如果您只是想過濾掉其餘文本部分,則可以執行此操作。

xargs grep -s 's:text '

這應該只發現s:text情況下,與一個't後的空間。如果您需要查找僅具有名稱元素的s:text實例,請將結果輸送到另一個grep表達式,或者使用正則表達式僅過濾所需的元素。

+0

如果「文本」在輸出結尾處怎麼辦?它會不會在你的解決方案中被跳過? – pkuszewski 2015-12-19 22:21:44

22

您可以通過grep的搜索遞歸下降的xargs命令。而你通常不需要's'的標誌。因此:

grep -wr 's:text' 
23

使用\b以匹配「字邊界」,這將使得在全字搜索匹配。

所以你的grep會看起來像

grep -r "\bSTRING\b" 

添加顏色和行號也會有所幫助

grep --color -rn "\bSTRING\b" 

http://www.regular-expressions.info/wordboundaries.html

有跡象表明,有資格作爲三個不同的位置字界:

  • 在字符串中的第一個字符之前,如果第一個字符是 單詞字符。
  • 在字符串中的最後一個字符後面,如果最後一個 字符是單詞字符。
  • 字符串中的兩個字符之間, 其中一個是單詞字符,另一個不是單詞字符。
0

你可以嘗試RG,https://github.com/BurntSushi/ripgrep

rg -w 's:text' . 

應該這樣做

+0

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/17780631) – 2017-10-30 11:55:16

+1

我確實提供了答案:rg -w's:text'。 – ms4720 2017-11-01 08:13:14