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

sta*_*low 128 unix linux bash grep

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

sta*_*low 151

grep -r --include=*.{cc,h} "hello" .
Run Code Online (Sandbox Code Playgroud)

这将读取:在此.(当前)目录中以递归方式(在所有子目录中)搜索包含"hello"的所有.cc或.h文件

来自另一个stackoverflow问题

  • 在原始帖子中你说"当前目录",并没有关于递归或在子目录中需要它(我意识到你在后面的文章中提到它).对于那些只对当前目录感兴趣的人来说,它是`grep -si"hello"--include =*.{cc,h} ./*./.*`(也可以搜索隐藏文件).这是在所有/隐藏文件中搜索字符串的通用版本:`grep -s"hello"*.*`.也许大多数*通常*有用(和最简单),这搜索所有非隐藏文件"hello":`grep -si"hello"./*`感谢这篇文章:http://askubuntu.com/a/777456 (5认同)

Don*_*ner 47

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

grep hello *.h *.cc
Run Code Online (Sandbox Code Playgroud)

  • @Jammin在提问时你应该清楚这一点.这个答案是对您所述问题的"正确"答案. (8认同)

Nou*_*him 19

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

检查手册页find,并xargs了解详细信息.

  • 您也可以使用`find -exec +`语法而不是xargs (3认同)

AB *_*bhi 6

递归搜索当前目录:

grep -r 'myString' .
Run Code Online (Sandbox Code Playgroud)


Jon*_*ler 5

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

如果您有GNU findxargs

find . -name '*.cc' -print0 -o -name '*.h' -print0 | xargs -0 grep hello /dev/null
Run Code Online (Sandbox Code Playgroud)

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

如果您没有笨拙的名称(带有空格等),则可以使用:

find . -name '*.*[ch]' -print | xargs grep hello /dev/null
Run Code Online (Sandbox Code Playgroud)

这可能会选择一些您不希望使用的名称,因为模式匹配比较模糊(但更简单),但可以使用。它的工作原理与非GNU版本findxargs


Jac*_*ack 5

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

这会显示文件名:

grep -lR hello * | egrep '(cc|h)$'
Run Code Online (Sandbox Code Playgroud)

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

grep hello `grep -lR hello * | egrep '(cc|h)$'`
Run Code Online (Sandbox Code Playgroud)