如何使用 grep 在工作目录中搜索所有包含字符串“ hello”但只显示该字符串的文件。还有。抄送文件?

如何使用 grep 在工作目录中搜索包含字符串“ hello”的所有文件并只显示。还有。抄送文件?

318777 次浏览

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

grep hello *.h *.cc

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

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

如果你需要一个递归搜索,你有很多选项。你应该考虑 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

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

这将读取: 递归搜索(也在所有子目录中)所有。Cc OR.在这个 .(当前)目录中包含“ hello”的 h 文件

来自另一个堆栈溢出问题

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

如果没有. h 或者没有. cc 文件,您可能需要使用 shopt -s nullglob来避免错误消息。

如果我仔细阅读你的问题,你会要求“ grep 在工作目录中搜索包含字符串“ hello”的 < em > 任何和所有文件 ,然后只显示。还有。抄送档案」。因此,为了满足你们的具体要求,我提出以下建议:

这将显示文件名:

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

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

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

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

递归搜索工作目录:

grep -r 'myString' .