【问题标题】:What is the equivalent of grep -r in AWK?AWK 中 grep -r 的等价物是什么?
【发布时间】:2017-05-23 07:26:49
【问题描述】:

我在很多子目录中有很多源代码文件。通常我使用grep -r 'pattern' . 来查找在哪些文件中可以找到我使用的函数的定义。在命令行中使用 AWK 做同样事情的正确方法是什么?

【问题讨论】:

  • grep -r 是可憎的,永远不要使用它或 GNU 家伙给 grep 的任何其他选项来查找文件。要查找文件,请使用非常明显的工具 - find。我只是祈祷他们现在不要挤在一个房间里,计划同时为 sed、sort、cat、awk 和所有其他 UNIX 工具添加类似find 的功能,或者向grep 添加sort 功能或....

标签: shell awk command-line grep


【解决方案1】:

我能想到两个选择:

  1. 使用find . -type f -exec awk '/pattern/ { print FILENAME }' {} +
  2. 在支持它的 shell 中,例如 bash >= v4.0,使用 globstar:

    shopt -s globstar
    awk '/pattern/ { print FILENAME }' **/*
    # unset it later (optional, e.g. if within a script)
    # shopt -u globstar
    

【讨论】:

    【解决方案2】:

    你可以使用下面的 find 命令让几乎所有的 unix 命令递归运行。

    find <dir> -type f -exec <command> {} +
    
    find <dir>: 
    

    在目录中查找。

    -type f:
    

    文件类型:普通文件

    -exec <command> {} +: 
    

    -exec 操作的这个变体在选定的文件上运行指定的命令,但命令行是通过在末尾附加每个选定的文件名来构建的;该命令的调用总数将远少于匹配文件的数量。命令行的构建方式与 xargs 构建其命令行的方式非常相似。命令中只允许有一个“{}”实例。该命令在起始目录中执行。

    command:
    

    可以是 sed、grep、awk 或任何其他 linux 命令。

    【讨论】:

    • 最后的{} +到底是什么意思?
    猜你喜欢
    • 2011-03-24
    • 2011-09-14
    • 2021-06-19
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    相关资源
    最近更新 更多