4

Linuxgrep -r <string> <path>では、 の下にある in ファイルのすべてのインスタンスを見つける一般的な方法です。<path>これにより、基本的<path>に include の下にあるすべてのファイルが得られます<string>。しかし、少数の文字列を含むすべてのファイルを検索したい場合はどうすればよいでしょうか? からとgrep -r <string1> <path> | grep <string2>を含むすべてのファイルを同じ行に取得できますが、 と を含むファイルを別の行に取得するにはどうすればよいですか?<string1><string2><string1><string2>

4

1 に答える 1

5

あなたが試すことができます

grep -rl searchstring1 . | xargs grep -l searchstring2

.両方を含むディレクトリ内のファイル名のリストを取得しますsearchstring(必ずしも同じ行にあるとは限りません)。さらに検索文字列が必要な場合は、それをカスケードできます。

grep -rl searchstring1 . \
  | xargs grep -l searchstring2 \
  | xargs grep -l searchstring3

ファイル名にスペースやその他の厄介な文字が含まれている場合、xargsだまされるため、これは注意が必要です。このような特別な場合 (または、その問題が発生しないようにするため) には、0 バイトで終了する文字列を使用できます。

grep -rlZ searchstring1 . \
  | xargs -0 grep -lZ searchstring2 \
  | xargs -0 grep -l searchstring3

出力を確認するには、次のように sth を使用できます。

grep -rlZ searchstring1 . \
  | xargs -0 grep -lZ searchstring2 \
  | xargs -0 grep -lZ searchstring3 \
  | xargs -0 egrep 'searchstring2|searchstring2|searchstring3' /dev/null \
  | less

完全に異なるアプローチは、find単純な方法を使用することです (ただし、これは多くのgrepプロセスを開始するため、おそらく効率が低下します)。

find . -type f \( \
  -exec grep -q searchstring1 {} \; -a \
  -exec grep -q searchstring2 {} \; -a \
  -exec grep -q searchstring2 {} \; \) -print
于 2013-11-05T08:11:52.007 に答える