指定文件名模式的递归 Grep

指定文件名模式的递归 Grep

是否可以递归搜索并使用给定的文件模式?

我正在尝试做相当于

find ./ -name "*.[c|h]" -exec grep -Hn PATTERN {} \;

显然你可以使用 grep 的 -r 标志,但是当我指定文件名模式时,例如:

grep -Hn -r PATTERN *.c

它仅在当前目录中查找 *.c 文件,而不是递归查找。

我发现了这个,但它没有谈论指定文件名:递归 grep 与 find / -type f -exec grep {} \;哪个更有效/更快?

答案1

至少在最新版本的 GNU 中,您可以在参数grep中使用 glob 模式--include

grep -Hrn --include="*.[ch]" PATTERN .

.[在 GNU grep > 2.11 中,使用 时可以省略显式起始目录-r]

答案2

甚至在运行*.c之前就被 shell 扩展了。grep有了一个合适的花哨的外壳(例如zsh,或bashglobstar集合),人们可以通过类似的东西递归地预扩展

grep bla **/*.[ch]

但这是一个外壳解决方案。其他解决方案是查看此类工具中的文件检测支持,例如银色搜索者,代码搜索,ripgrep

相关内容