如何使用grepsearch当前目录中所有具有string“hello”的文件,但只显示.h和.cc文件?

如何使用grep在当前目录中search包含string“hello”的任何和所有文件,并仅显示.h和.cc文件?

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

它读取:recursionsearch(也在所有子目录中)包含“hello”的所有.cc或.h文件. (当前)目录

从另一个stackoverflow问题

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

 grep hello *.h *.cc 

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

有关详细信息,请查阅findxargs的手册页。

如果你需要recursionsearch,你有多种select。 你应该考虑一下。

否则,如果你有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 

这可能会select一些你不打算的名字,因为模式匹配比较模糊(但更简单),但是其他的方法是可行的。 它适用于非GNU版本的findxargs

如果我仔细阅读你的问题,你要求“grep在当前目录中search包含string”hello“的任何和所有文件 ,并只显示”.h和.cc文件“。 所以为了满足你的确切要求,这里是我的提交:

这显示文件名称:

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

…并显示文件名和内容:

 grep hello `grep -lR hello * | egrep '(cc|h)$'` 
 grep -l hello **/*.{h,cc} 

如果没有.h或没有.cc文件,您可能需要购买shopt -s nullglob以避免出现错误消息。

最简单的方法:grep -Ril“Your text”/