使用单个内置命令在子目录中的文件中查找子字符串?

使用单个内置命令在子目录中的文件中查找子字符串?

在 Windows 中,如果我想在所有子目录中的所有文件中查找字符串,我会这样做

findstr /C:"the string" /S *.h

find然而,在 Linux(比如 Ubuntu)中,除了涉及、xargs、 和 的一些管道命令之外,我没有找到其他方法grep(示例位于此页面:如何递归地 grep 遍历子目录?)然而,我的问题不同:有没有单个内置命令不需要编写我的 shell 脚本就能通过这个魔法起作用吗?

答案1

GNU grep 允许通过子目录递归搜索:

grep -r --include='*.h' 'the string' .

答案2

grep -r searchpattern /path/to/start/in

其中/path/to/start/in/可以只是“ .”表示当前目录。

答案3

不, find -name \*.h -print0 | xargs -0 grep -l 'the regex'这就是它的魔力。

答案4

有没有单个内置命令通过这个魔法起作用......?

做个迂腐的人,不,你不能假设存在这样的命令

Unix 有许多不同的实现,每种都有其不同的特点。 POSIX,共同点(也是最接近 Unices 标准的东西)没有指定这样的选项grep

正如其他答案中提到的,GNU 的实现grep有一个非标准选项可以满足您的需求。虽然这种特定的实现在 Linux 系统上可能很常见,但您不能假设它在任何 Unix 上都可用,甚至在某些 Linux 系统上也是如此。

最后,我要提到的是Unix哲学有利于多个原始程序的组合,而不是使用一个试图同时完成所有操作的大型整体可执行文件。

在您的情况下,抓取文件系统和匹配流中的正则表达式是两个独立的任务。在单独的程序中对待每一个都是正常的。

相关内容