2017-05-23 63 views
0

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

+0

'grep -r'是一个可憎的事物,绝不会使用它或任何其他GNU人员给grep找到文件的选项。要找到文件,使用尖叫的明显工具 - “find”。我只是祈祷他们不是坐在一个房间里,现在正在策划为sed,sort,cat,awk和其他所有UNIX工具添加find类似的功能,或者为'grep'添加'sort'功能或.... –

回答

2

我能想到的两个选项:

  1. 使用find . -type f -exec awk '/pattern/ { print FILENAME }' {} +
  2. 在支持它,就像庆典> = V4.0,使用globstar外壳:

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

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

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

find <dir>: 

查找目录。

-type f: 

文件的类型:普通文件

-exec <command> {} +: 

的-exec这一行动变种运行在选定的文件指定的命令,但该命令行通过在最后附加每个选定的文件名来构建;该命令的总调用次数将远远少于匹配文件的数量。命令行的构建方式与xargs构建其命令行的方式大致相同。命令中只允许有一个“{}”实例。该命令在起始目录中执行。

command: 

可以用sed,grep的,AWK或任何其他Linux命令。

+0

最后的'{} +'究竟意味着什么? –

相关问题