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