我想找到所有包含“谁”、“什么”、“为什么”、“如何”、“何时”的文件。所有单词,顺序不限。不区分大小写
我试过:
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
会将其拆分为多个“文件名”。
将-0
选项添加到xargs
以使它们按 NUL 而不是空格进行分割,并将--null
or-Z
选项添加到grep
命令行以使其使用 NUL 而不是换行符。 (但如果你想阅读输出,请省略--null
最后的......)grep
或者,从文件名中删除空格和其他 shell 特殊字符。
否则,您的解决方案基本上是正确的,尽管 @James 的答案是正确的,您需要-i
不区分大小写的选项。
答案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}' {} +