为什么所有子目录中的字符串的 grep 都不起作用?

pos*_*ing 4 command-line directory grep

这是我试图运行的命令。

grep -r "printf" *.c
Run Code Online (Sandbox Code Playgroud)

我试图从.c我的 cwd 中存在的所有文件中获取所有 printf 行。到目前为止,我的当前目录是 Desktop,并且我.c在 Desktop 下的子目录中至少有 10-15 个文件,但是此命令根本不显示任何匹配项。那么在这种情况下我该如何进行这项工作呢?

hee*_*ayl 9

如果你这样做:

grep -r "printf" *.c
Run Code Online (Sandbox Code Playgroud)

shell 将扩展*.c.c以您当前目录结尾的所有文件/目录,如果不存在这样的文件/目录,则该模式将按字面意思处理(大概您没有nullglob设置)。

正如您所看到的,您当前的模式永远不会在当前目录下,因为您在当前目录中没有任何.c文件,或者如果有任何文件,它们也没有printf,导致输出为空。

您只需要使用--include来搜索选择性文件,并-r递归遍历:

grep -r --include="*.c" "printf" .
Run Code Online (Sandbox Code Playgroud)

以上将在所有.c文件中搜索字符串 (pattern) printf,从当前目录开始递归。

如果您想遵循所有符号链接:

grep -R --include="*.c" "printf" .
Run Code Online (Sandbox Code Playgroud)