「誰が」、「何を」、「なぜ」、「どのように」、「いつ」を含むすべてのファイルを探したいのですが。順序に関係なくすべての単語です。大文字と小文字を区別しない
私は試した:
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
-Z
grep
--null
grep
または、ファイル名からスペースやその他のシェル特殊文字を削除します。
-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}' {} +