Grep

grep 目錄並返回帶有行號的列表

  • December 16, 2018

我目前正在嘗試了解更多關於 bash 腳本和所有有趣的東西,我拼湊了這個小命令:

find $path | xargs grep -n $pattern | awk '{print $1}'

雖然這確實有效,但我想知道我是否在重新發明輪子。有沒有更好的方法來搜尋目錄、grep 文件以查找模式並返回帶有行號的列表?

許多grep變體實現了遞歸選項。例如,GNU grep

-R, -r, --recursive
         Read all files under each directory, recursively; this is equivalent to the -d recurse option.

然後您可以刪除find

grep -n -r $pattern $path | awk '{ print $1 }'

但這超過了行號。awk正在列印第一列。這個例子

src/main/package/A.java:3:import java.util.Map;
src/main/package/A.java:5:import javax.security.auth.Subject;
src/main/package/A.java:6:import javax.security.auth.callback.CallbackHandler;

將列印為

src/main/package/A.java:3:import
src/main/package/A.java:5:import
src/main/package/A.java:6:import

注意:import每一行中的。您可能希望用於sed過濾輸出。

由於:文件名中可能存在 a,因此您可以使用-Zgrep 選項在文件名後輸出一個空字元 (\0)。

grep -rZn $pattern $path | sed -e "s/[[:cntrl:]]\([0-9][0-9]*\).*/:\1/" 

與以前相同的範例將產生

src/main/package/A.java:3
src/main/package/A.java:5
src/main/package/A.java:6

引用自:https://unix.stackexchange.com/questions/25693