2017-05-23 44 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

最後的'{} +'究竟意味着什麼? –

相關問題