目录中具有特定扩展名的文件中的Grep


11

是否有一个命令可以在具有特定扩展名的目录下的文件中搜索关键字?

该字符串grep -irn "string" ./path提供对目录下所有文件的递归搜索./path。我的具体要求是搜索所有./path带有扩展名的文件,例如*.h

Answers:



10

小号等(打开)SH ELL 选择离子globstar与所述命令

    shopt -s globstar

**作为文件名组件,这将意味着此处和此处的所有内容。因此,path/**意味着path目录 及其子目录中的所有内容。(您无需在./这里键入。)然后您可以使用

grep -in "string" path/**/*.h

搜索.h中和下的所有文件path


您可以ü NSET的选项shopt -u



3

如果可以在计算机上安装某些东西,建议使用ack

您可以使用它做更多您需要的事情。对于您的用例,您可以执行以下操作:

# Depending of your system, you have to use one or the other
ack --hh -i string path
ack-grep --hh -i string path
  • --hh过滤h个文件
  • -i忽略大小写

要查找本机支持哪些文件过滤器,请运行命令ack --help=type


还有ag,ack的前克隆。以前是因为它们的功能集有所不同。
8bittree

我不知道 感谢分享。
公元

3

这个如何?

find -L ./path -name "*.h" -exec grep -in "string" {} \;

说明:

  • -L:跟随符号链接
  • -name:使用星号可以描述扩展名
  • -in:与您的建议相同,但是用find命令替换“ r”
  • {}:代表find命令的结果
  • \; :如果您find与结合使用-exec,则这是命令结束符

1
"*.h"工作如何?我以为应该是'*.h'

我总是使用双引号,但我认为这没有什么不同。
Dominique

0

如果您使用的是gnu grep,那么它会有一个完全符合您想要的标志:

grep -irn --include=\*.h "string" path

尽管我不认为它可以在其他版本中使用。

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.