web-dev-qa-db-ja.com

単語全体をgrepする方法

私は次のコマンドを使用して、サブディレクトリにあるものをgrepします

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

ただし、これにより、<s:textfield name="sdfsf"...../>

それを避けるために何ができるので、<s:text name="sdfsdf"/>

またはそのことについて....も見つけます<s:text somethingElse="lkjkj" name="lkkj"

基本的に s:textnameは同じ行にある必要があります。..

62
josh

-wオプションは、Wordの終わりであることを指定します。

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

71
Derek H

つかいます \b「単語の境界」で一致します。これにより、単語全体でのみ検索が一致します。

あなたのgrepは次のようになります

grep -r "\bSTRING\b"

色と行番号を追加することも役立ちます

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

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

Wordの境界として認められる3つの異なる位置があります。

  • 文字列の最初の文字の前(最初の文字がWord文字の場合)。
  • 文字列の最後の文字の後(最後の文字がWord文字の場合)。
  • 文字列内の2つの文字の間。1つはWord文字で、もう1つはWord文字ではありません。
46
cs01

Grepを再帰的に検索することにより、xargsコマンドを削除できます。通常、「s」フラグは必要ありません。したがって:

grep -wr 's:text' 
26
joctee

rgを試すことができます https://github.com/BurntSushi/ripgrep

rg -w 's:text' . 

それをする必要があります

1
ms4720

残りのテキスト部分のみを除外する場合は、これを実行できます。

xargs grep -s 's:text '

これにより、最後のtの後にスペースがあるs:textインスタンスのみが検索されます。名前要素のみを持つs:textインスタンスを見つける必要がある場合は、結果を別のgrep式にパイプするか、regexを使用して必要な要素のみをフィルタリングします。

0
Stefan Kendall