如何使用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"
。
有关详细信息,请查阅find
和xargs
的手册页。
如果你需要recursionsearch,你有多种select。 你应该考虑一下。
否则,如果你有GNU find
和xargs
:
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版本的find
和xargs
。
如果我仔细阅读你的问题,你要求“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”/