単一検索コマンドで複数のgrepを実行する

単一検索コマンドで複数のgrepを実行する

findコマンドを使用して、複数のパターンを含むいくつかのファイルを同時に検索したいと思います。

私は次のことを試しました:

find . -name "*.xml" -exec grep -iH keyword1 + && grep -iH "keyword2" {} \;

ただし、上記のコマンドは機能しません。

Bashで実装できますか?

ベストアンサー1

私が理解したのは、以下を含むリストをリストしたいと思います。両方「キーワード1」と「キーワード2」。これには、-exec次の2つのテストを使用できます。

find . -name "*.xml" -exec grep -iq keyword1 {} \; -exec grep -iH keyword2 {} \;

grep最初の項目がtrueを返すと、条件付きで2番目の項目が実行されます。このオプションは "keyword1"のみを含むすべてのファイルを一覧表示し、-q最初の出力の出力をブロックします。grep

この-Hオプションはファイル名と一致する行を出力するため、これを使用することをお勧めします-l。だから

find . -name "*.xml" -exec grep -iq keyword1 {} \; -exec grep -il keyword2 {} \;

これにより、Calebの提案に似た出力が生成されますが、追加されます-print

おすすめ記事