web-dev-qa-db-ja.com

ファイル内の複数の文字列を見つける方法は?

次のコマンドを使用して、指定した文字列のファイルを検索します。

find /var/www/http -type f | xargs grep -iR "STRING1"

しかし、「STRING1」を含むファイルを見つけるにはどうすればよいですかOR「STRING2」OR「STRING3」

このコードは機能しません:

find /var/www/http -type f | xargs grep -iR "STRING1" | xargs grep -iR "STRING2"
18
SPnova

POSIXly、-Eオプションでgrepを使用:

find /var/www/http -type f -exec grep -iE 'STRING1|STRING2' /dev/null {} +

または-e

find /var/www/http -type f -exec grep -i -e 'STRING' -e 'STRING2' /dev/null {} +

一部の実装では、少なくともGNUシステム、OSXおよびFreeBSD)では、エスケープできます|

find /var/www/http -type f -exec grep -i 'STRING1\|STRING2' /dev/null {} +
25
cuonglm

メンテナンスを簡単にするために(検索する文字列のリストが将来変更される可能性がある場合)、パターンをファイル(たとえば、patterns.txt)に入れ、_-f_スイッチ(_-R_ is findをファイルに制限している場合は不要です。_-H_は、ファイル名が1つしかない場合にファイル名を提供します; _-F_は、grepが検索しているパターンを文字列として扱うようにします。正規表現ではありません。通常、これが必要です):

_find /var/www/http -type f -exec grep -iHFf patterns.txt {} +
_
8
Paulo Almeida

egrepだけを使用することの何が問題になっていますか?

egrep -r 'string1|string2|string3' /var/www/http
6
user1293137