grep递归文件名匹配(grep -ir“xyz”* .cpp)不起作用

时间:2015-08-03 22:00:37

标签: grep

而 grep -ir“xyz”*以递归方式搜索目录并告诉我该文本存在于./x/y/z/abc.cpp中 但是, grep -ir“xyz”* .cpp没有结果。 是不是第二个命令应该递归grep目录中的所有cpp文件? 我在这里错过了什么?

1 个答案:

答案 0 :(得分:23)

Grep将通过您与glob模式匹配的任何目录进行递归。 (在您的情况下,您可能没有任何与模式匹配的目录" * .cpp")您可以明确指定它们:grep -ir "xyz" *.cpp */*.cpp */*/*.cpp */*/*/*.cpp等。您还可以使用--include选项(见下面的例子)

如果您使用的是GNU grep,则可以使用以下命令:

grep -ir --include "*.cpp" "xyz" .

上面的命令表示从当前目录开始递归搜索,忽略模式上的大小写,只搜索匹配glob模式的文件" * .cpp"。

OR 如果您使用的是其他Unix平台,可以使用:

find ./ -type f -name "*.cpp" -print0 | xargs -0 grep -i "xyz"

如果您确定没有文件名称中包含空格,则可以省略-print0-0

上面的命令说明如下:查找当前目录下与名称glob" * .cpp"匹配的所有文件。然后将它们打印出来,用null分隔; xargs应该读取stdin并将其输入拆分为空值,然后使用该文件列表调用grep。