如何使用 grep 在工作目录中搜索包含字符串“ hello”的所有文件并只显示。还有。抄送文件?
您可以传入通配符,而不是指定文件名或使用 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"
有关详细信息,请查看 find和 xargs的手册页。
find
xargs
如果你需要一个递归搜索,你有很多选项。你应该考虑 ack。
ack
如果没有,如果你有 GNU find和 xargs:
find . -name '*.cc' -print0 -o -name '*.h' -print0 | xargs -0 grep hello /dev/null
使用 /dev/null可以确保打印文件名; -print0和 -0处理包含空格(换行符等)的文件名。
/dev/null
-print0
-0
如果没有繁琐的名称(带有空格等) ,可以使用:
find . -name '*.*[ch]' -print | xargs grep hello /dev/null
这可能会选择一些您不想要的名称,因为模式匹配更模糊(但更简单) ,但是在其他情况下可以工作。它适用于非 GNU 版本的 find和 xargs。
grep -r --include=*.{cc,h} "hello" .
这将读取: 递归搜索(也在所有子目录中)所有。Cc OR.在这个 .(当前)目录中包含“ hello”的 h 文件
.
来自另一个堆栈溢出问题
grep -l hello **/*.{h,cc}
如果没有. h 或者没有. cc 文件,您可能需要使用 shopt -s nullglob来避免错误消息。
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' .