Grep
grep 目錄並返回帶有行號的列表
我目前正在嘗試了解更多關於 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,因此您可以使用-Z
grep 選項在文件名後輸出一個空字元 (\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