递归搜索包含所有搜索字符串的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会将其拆分为多个“文件名”。

-0选项添加到xargs以使它们按 NUL 而不是空格进行分割,并将--nullor-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}' {} +

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

相关内容