如何使用grep在当前目录中搜索包含字符串“hello”的所有文件并仅显示.h和.cc文件?
答案 0 :(得分:144)
grep -r --include=*.{cc,h} "hello" .
这是:在这个.
(当前)目录中包含“hello”的所有.cc或.h文件递归搜索(在所有子目录中)
答案 1 :(得分:45)
您可以传入通配符,而不是指定文件名或使用标准输入。
grep hello *.h *.cc
答案 2 :(得分:19)
find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello"
。
查看find
和xargs
的手册页以获取详细信息。
答案 3 :(得分:5)
如果我仔细阅读你的问题,你要求“grep在当前目录中搜索包含字符串”hello“的 任何和所有文件 并仅显示.h和.cc文件“。因此,为了满足您的确切要求,我的提交是:
显示文件名:
grep -lR hello * | egrep '(cc|h)$'
...这显示文件名和内容:
grep hello `grep -lR hello * | egrep '(cc|h)$'`
答案 4 :(得分:5)
要递归搜索当前目录:
grep -r 'myString' .
答案 5 :(得分:4)
如果您需要递归搜索,则可以使用多种选项。您应该考虑ack
。
如果你没有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
这可能会找到一些你不想要的名字,因为模式匹配更模糊(但更简单),但是否则有效。它适用于非GNU版本的find
和xargs
。
答案 6 :(得分:2)
grep -l hello **/*.{h,cc}
如果没有.h文件或没有.cc文件,您可能希望shopt -s nullglob
避免出现错误消息。
答案 7 :(得分:-1)
最简单的方法:grep -Ril“你的文字”/