【问题标题】:How do I grep recursively in files with a certain extension? [duplicate]如何在具有特定扩展名的文件中递归地 grep? [复制]
【发布时间】:2019-01-27 20:53:12
【问题描述】:

要在子目录中查找所有带有.out 扩展名的文件路径,我使用

find . -name '*.out'

要在所有以.out 结尾的文件中查找模式,我使用

grep pattern *.out

如何组合这两个命令,以便找到所有文件,然后在这些文件中进行 greps?

我正在寻找一个优雅的替代品

grep -r 'pattern' . | grep '.out'

【问题讨论】:

    标签: grep find


    【解决方案1】:

    如果您的 shell 是 Bash 版本 4+,您可以使用 globstar

    shopt -s globstar
    grep pattern **/*.out
    

    来自Bash manual

    全球之星

    如果设置,文件名扩展上下文中使用的模式“**”将 匹配所有文件和零个或多个目录和子目录。如果 模式后跟一个“/”,只有目录和子目录 匹配。

    【讨论】:

      【解决方案2】:

      find 允许您使用-exec 选项在找到的每个文件上运行程序:

      find -name '*.out' -exec grep -H pattern {} \;
      

      {} 表示文件名,; 告诉find 这是grep 参数的结尾。 -H 告诉 grep 始终打印文件名,通常只有在有多个文件要处理时才会这样做。

      【讨论】:

      • 这行得通,但我也想列出文件名。
      • Grep -H 会这样做。已添加。
      猜你喜欢
      • 2019-10-13
      • 2020-06-02
      • 2011-08-21
      • 1970-01-01
      • 2012-11-29
      • 2011-02-14
      • 1970-01-01
      • 2020-04-05
      相关资源
      最近更新 更多