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

How do I use grep to search the current directory for all files having the a string “hello” yet display only .h and .cc files?

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


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

这意味着:在这个.目录(当前)中,递归地(在所有子目录中)搜索包含"hello"的所有.cc或.h文件。

从另一个StackOverflow问题


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

1
grep hello *.h *.cc


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

查看findxargs的手册页了解详细信息。


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

显示文件名:

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

…显示文件名和内容:

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

要在当前目录中递归搜索:

1
grep -r 'myString' .

如果需要递归搜索,您可以有多种选择。你应该考虑一下ack

否则,如果您有GNU findxargs

1
find . -name '*.cc' -print0 -o -name '*.h' -print0 | xargs -0 grep hello /dev/null

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

如果您没有顽固的名字(带空格等),可以使用:

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

这可能会得到一些您不想要的名字,因为模式匹配更模糊(但更简单),但其他方面也可以。它与findxargs的非GNU版本一起工作。


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

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


最简单的方法:grep-ril"你的文本"/