grepを使用してファイルから複数の文字列を検索する方法(クロスポイント検索)

grepを使用してファイルから複数の文字列を検索する方法(クロスポイント検索)

grepを使用して入れ子になったディレクトリ構造内の次のファイルを検索する方法みんな私の検索パターンに含まれる単語は何ですか?

複数の単語を含むファイルを見つけるためにgrepを使用したいと思います。 foo barとbahを試してみましょう。できますが、grep -rl foo |xargs grep -rl bah| ...etcより簡単な方法はありますか?検索する文字列ファイルとして-Fを使用できることを知っていますが、まだOR演算子(和集合)を使用して文字列を検索し、AND演算子(交差)を使用する必要があると思います。

ベストアンサー1

find+awk解決策:

find . -type f -exec awk '/\<foo\>/{ p1=1 }/\<bar\>/{ p2=1 }/\<bah\>/{ p3=1 }
                          p1 && p2 && p3{ print FILENAME; exit }' {} +

awkプログラムの詳細:

  • /\<foo\>/{ p1=1 }/\<bar\>/{ p2=1 }/\<bah\>/{ p3=1 }- それぞれの必須パターンが見つかったら、対応するフラグを設定します。
  • p1 && p2 && p3- すべてのパターンが見つかった場合:
    • print FILENAME- 現在の印刷ファイル名/ファイルパス
    • exit- スクリプト実行直ちに終了

おすすめ記事