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

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

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

这意味着:在这个.目录(当前)中,递归地(在所有子目录中)搜索包含"hello"的所有.cc或.h文件。

从另一个StackOverflow问题

在最初的文章中,你说的是"当前目录",而不是递归地或者在子目录中需要它(我知道你在后面的文章中提到过它)。对于那些只关心如何在当前目录中执行此操作的人,它是grep -si"hello" --include=*.{cc,h} ./* ./.*(也搜索隐藏文件)。下面是搜索所有/隐藏文件中字符串的通用版本:grep -s"hello" * .*。可能最有用(也是最简单的),这会搜索所有非隐藏文件中的"hello":grep -si"hello" ./*,这要归功于本文:askubuntu.com/a/777456

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

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

grep hello *.h *.cc

我也需要所有的子目录

向该查询添加-R标志

不幸的是,添加-R并不起作用。它先扩展*,然后递归进行。

努法尔的答案是,如果你需要子目录,你要找的是什么

@当你问这个问题的时候,你应该清楚这点。这个答案是你所说问题的"正确"答案。

+1根据问题,这是正确的答案。

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

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

查看find和xargs的手册页了解详细信息。

你必须在'*.cc'之后有一个-print0,否则你在搜索的那一部分没有动作。或者你必须在里面插入括号:find . \( -name '*.cc' -or -name '*.h' \) -print0。

谢谢你注意到这一点。我已经将答案编辑为"修复"。

您还可以使用find -exec +语法而不是xargs

@乔丹姆:是的:-exec grep"hello" {} +,其中一对大括号代表文件名。好建议。

好点。我不知道江户记1〔9〕的事。

如果我仔细阅读了您的问题,您会要求grep搜索当前目录中包含字符串"hello"的任何和所有文件,并且只显示.h和.cc文件。为了满足您的准确要求,我在此提交:

显示文件名:

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

…显示文件名和内容:

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

要在当前目录中递归搜索:

grep -r 'myString' .

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

这可能会得到一些您不想要的名字,因为模式匹配更模糊(但更简单),但其他方面也可以。它与find和xargs的非GNU版本一起工作。

注意,你也可以说find ... -exec grep"hello" {} +。

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

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

我加了什么?

RTM:男.cx/grep

我知道如何使用谷歌等。我在这里问它是因为几个答案都有"-l",而且很高兴把所有信息放在一个地方。

-L(小写"el")抑制正常输出。打印通常从中打印输出的每个输入文件的名称。扫描/搜索将在第一次匹配时停止。

最简单的方法:grep-ril"你的文本"/

这不仅显示.h或.cc文件,还可以解释使用的选项以及原因。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值