而grep -ir"xyz"*递归搜索目录并告诉我文本存在于./x/y/z/abc.cpp但是,grep -ir"xyz"*.cpp没有提供任何结果.是不是第二个命令应该递归grep目录中的所有cpp文件?我在这里错过了什么?
gym*_*all 29
Grep将通过您与glob模式匹配的任何目录进行递归.(在您的情况下,您可能没有任何与模式"*.cpp"匹配的目录.)您可以明确指定它们:grep -ir "xyz" *.cpp */*.cpp */*/*.cpp */*/*/*.cpp等等.您还可以使用--include选项(请参阅下面的示例)
如果您使用的是GNU grep,则可以使用以下命令:
grep -ir --include "*.cpp" "xyz" .
Run Code Online (Sandbox Code Playgroud)
上面的命令表示在当前目录中以递归方式搜索,忽略模式上的大小写,并仅搜索与glob模式"*.cpp"匹配的文件.
或者如果你在其他Unix平台上,你可以使用:
find ./ -type f -name "*.cpp" -print0 | xargs -0 grep -i "xyz"
Run Code Online (Sandbox Code Playgroud)
如果您确定没有文件的名称中有空格,则可以省略-print0和-0
上面的命令说明如下:查找当前目录下与名称glob"*.cpp"匹配的所有文件,然后将它们打印出来,用null分隔; xargs应该读取stdin并将其输入拆分为空,然后使用该文件列表调用grep.