次のコマンドを使用して、指定した文字列のファイルを検索します。
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"
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 {} +
メンテナンスを簡単にするために(検索する文字列のリストが将来変更される可能性がある場合)、パターンをファイル(たとえば、patterns.txt)に入れ、_-f
_スイッチ(_-R
_ is find
をファイルに制限している場合は不要です。_-H
_は、ファイル名が1つしかない場合にファイル名を提供します; _-F
_は、grepが検索しているパターンを文字列として扱うようにします。正規表現ではありません。通常、これが必要です):
_find /var/www/http -type f -exec grep -iHFf patterns.txt {} +
_
egrep
だけを使用することの何が問題になっていますか?
egrep -r 'string1|string2|string3' /var/www/http