如何使用grep在当前目录中搜索具有字符串“ hello”但仅显示.h和.cc文件的所有文件?


138

如何使用grep在当前目录中搜索包含字符串“ hello”的所有文件,并仅显示.h和.cc文件?

Answers:


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

读取:递归搜索(也在所有子目录中)在此.(当前)目录中搜索所有包含“ hello”的.cc或.h文件

来自另一个stackoverflow问题


5
在原始帖子中,您说的是“当前目录”,而与递归或子目录中的内容无关(我意识到您在以后的帖子中提到了它)。对于那些只想在当前目录中执行此操作感兴趣的人,它grep -si "hello" --include=*.{cc,h} ./* ./.*(也搜索隐藏文件)。这是在所有/隐藏文件中搜索字符串的通用版本:grep -s "hello" * .*。也许最普遍有用的(也是最简单的),这个搜索所有的非隐藏文件“你好”:grep -si "hello" ./* 多亏了这个帖子:askubuntu.com/a/777456
jbobbins

1
grep -r --include=*.{java,py} "hello" .

由于某些原因,即使在使用GNU grep实用程序时,这在macOS上也不起作用。
xApple

49

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

grep hello *.h *.cc

我还需要所有子目录
stackoverflow 2012年

-R不幸的是添加失败。它*在递归之前扩展了。
唐纳德·麦纳

Noufal的答案是您需要的子目录是什么
Donald Miner'2

8
@Jammin在问问题时,您应该对此有所了解。该答案是您所陈述问题的“正确”答案。
jordanm 2012年

$ grep -R hello *#从所有单词中找到包含hello(包括子目录)

19

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

检查手册页find,并xargs了解详细信息。


1
您必须要有一个-print0之后的'*.cc'符号,否则您将没有针对该部分搜索的操作。或者,您必须在其中插入括号:find . \( -name '*.cc' -or -name '*.h' \) -print0
乔纳森·勒夫勒

感谢您的注意。我已经编辑了答案以“修复”它。
Noufal Ibrahim'2

3
您也可以使用find -exec +语法代替xargs
jordanm 2012年

@jordanm:是:-exec grep "hello" {} +大括号代表文件名。好建议。
乔纳森·莱夫勒 Jonathan Leffler)2012年


5

如果需要递归搜索,则有多种选择。你应该考虑一下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


注意,您也可以说find ... -exec grep "hello" {} +
fedorqui'SO停止伤害

5

如果我仔细阅读了您的问题,您将要求“ grep在当前目录中搜索包含字符串“ hello”的所有文件,并仅显示.h和.cc文件”。因此,为了满足您的确切要求,我在此提交:

这将显示文件名:

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

...然后显示文件名和内容:

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

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

shopt -s nullglob如果没有.h或.cc文件,则可能要避免出现错误消息。


4
我知道如何使用google等。我在这里问它是因为几个答案都带有“ -l”,并且将所有信息都放在一个位置很高兴。
Andrew Swift

-l(小写“ el”)禁止正常输出。打印每个通常已从中打印输出的输入文件的名称。扫描/搜索将在第一个匹配项时停止。
Rex CoolCode查尔斯·查尔斯

-1

最简单的方法:grep -Ril“您的文本” /


1
这不仅显示.h或.cc文件,而且还有助于说明您使用了哪些选项以及原因。
kon psych 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.