如何使用grep在当前目录中搜索具有字符串“hello”但仅显示.h和.cc文件的所有文件?

时间:2012-02-09 19:10:40

标签: linux bash unix grep

如何使用grep在当前目录中搜索包含字符串“hello”的所有文件并仅显示.h和.cc文件?

8 个答案:

答案 0 :(得分:144)

grep -r --include=*.{cc,h} "hello" .

这是:在这个.(当前)目录中包含“hello”的所有.cc或.h文件递归搜索(在所有子目录中)

From another stackoverflow question

答案 1 :(得分:45)

您可以传入通配符,而不是指定文件名或使用标准输入。

grep hello *.h *.cc

答案 2 :(得分:19)

find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello"

查看findxargs的手册页以获取详细信息。

答案 3 :(得分:5)

如果我仔细阅读你的问题,你要求“grep在当前目录中搜索包含字符串”hello“的 任何和所有文件 并仅显示.h和.cc文件“。因此,为了满足您的确切要求,我的提交是:

显示文件名:

grep -lR hello * | egrep '(cc|h)$'

...这显示文件名和内容:

grep hello `grep -lR hello * | egrep '(cc|h)$'`

答案 4 :(得分:5)

要递归搜索当前目录:

grep -r 'myString' .

答案 5 :(得分:4)

如果您需要递归搜索,则可以使用多种选项。您应该考虑ack

如果你没有GNU findxargs

,那就失败了
find . -name '*.cc' -print0 -o -name '*.h' -print0 | xargs -0 grep hello /dev/null

使用/dev/null可确保您打印文件名; -print0-0处理包含空格(换行符等)的文件名。

如果您没有障碍名称(带空格等),您可以使用:

find . -name '*.*[ch]' -print | xargs grep hello /dev/null

这可能会找到一些你不想要的名字,因为模式匹配更模糊(但更简单),但是否则有效。它适用于非GNU版本的findxargs

答案 6 :(得分:2)

grep -l hello **/*.{h,cc}

如果没有.h文件或没有.cc文件,您可能希望shopt -s nullglob避免出现错误消息。

答案 7 :(得分:-1)

最简单的方法:grep -Ril“你的文字”/