Answers:
grep -r --include=*.{cc,h} "hello" .
读取:递归搜索(也在所有子目录中)在此.
(当前)目录中搜索所有包含“ hello”的.cc或.h文件
您可以传入通配符,而不是指定文件名或使用stdin。
grep hello *.h *.cc
-R
不幸的是添加失败。它*
在递归之前扩展了。
find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello"
。
检查手册页find
,并xargs
了解详细信息。
-print0
之后的'*.cc'
符号,否则您将没有针对该部分搜索的操作。或者,您必须在其中插入括号:find . \( -name '*.cc' -or -name '*.h' \) -print0
。
find -exec +
语法代替xargs
-exec grep "hello" {} +
大括号代表文件名。好建议。
如果需要递归搜索,则有多种选择。你应该考虑一下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
。
find ... -exec grep "hello" {} +
grep -l hello **/*.{h,cc}
shopt -s nullglob
如果没有.h或.cc文件,则可能要避免出现错误消息。
grep -si "hello" --include=*.{cc,h} ./* ./.*
(也搜索隐藏文件)。这是在所有/隐藏文件中搜索字符串的通用版本:grep -s "hello" * .*
。也许最普遍有用的(也是最简单的),这个搜索所有的非隐藏文件“你好”:grep -si "hello" ./*
多亏了这个帖子:askubuntu.com/a/777456