すべての検索文字列を含むtxtファイルを繰り返し検索します。

すべての検索文字列を含むtxtファイルを繰り返し検索します。

「誰が」、「何を」、「なぜ」、「どのように」、「いつ」を含むすべてのファイルを探したいのですが。順序に関係なくすべての単語です。大文字と小文字を区別しない

私は試した:

grep -rl --include='*.adoc' "Who" . | xargs grep -l "What" | xargs grep -l "Why" | xargs grep -l "How" | xargs grep -l "When"

それが提供するエラーは次のとおりです。

grep: Walkthrough/datatable/extras/Scroller/media/data/2500.adoc: No such file or directory

答え1

問題は、一部のファイル名にスペースが含まれていることです。 xargs複数の「ファイル名」に分割します。

スペースの代わりにNULに分割するには-0オプションを追加し、改行の代わりにNULを使用するにはコマンドラインにまたはオプションを追加します。 (しかし、出力を読むには最後を省略してください...)xargs--null-Zgrep--nullgrep

または、ファイル名からスペースやその他のシェル特殊文字を削除します。

-iそれ以外の場合は、大文字と小文字を区別しないオプションが必要であるという@Jamesの答えは正確ですが、解決策は基本的に正しいです。

答え2

awk -v RS="" -v IGNORECASE=1 '/who/&&/how/&&/when/&&/what/{print FILENAME}' *

find . -type f -name "*.adoc" -exec awk -v RS="" -v IGNORECASE=1 '/who/&&/how/&&/when/&&/what/{print FILENAME}' {} +

grep -i -E -rl --include='*.adoc' "(who|What|Why|when|where|how)" 。

関連情報