【Linux命令】在當前目錄下查詢出現特定字串的檔案位置資訊

Acelin_H發表於2021-07-23

有時候我們我會碰到這樣的問題:我要查詢一個字串在多個檔案裡總共出現了幾次,或者一個方法、一個函式在專案裡呼叫了幾次,都在哪裡呼叫,那我們要如何查詢,如何統計這些資訊呢?


場景復現


首先,要查詢字串,肯定優先考慮全域性搜尋命令grep(global search regular expression and print out the line:正則匹配全域性搜尋並列印行)。如果搜尋的範圍比較不明確,只知道在某個資料夾下,那可以先cd該目標路徑,然後用以下最簡單的命令:

grep -rn "待匹配字串" ./

r :表示遞迴

n :表示查詢結果顯示行號

結果是這樣的: 【檔案路徑】:【行號】 【當前行資訊】

如下圖:

image

如果你知道的範圍縮小了,或者只想在一些特定型別的檔案中查詢,比如,只想在該目錄下的所有java檔案查詢,可以用以下的方式:

find ./ -type f -name "*.java" | xargs grep -rn "待匹配字串"

如下圖:

image

該命令的作用是在當前目錄下,查詢所有java檔案,然後將每個檔案的路徑作為引數傳給grep "待匹配字串"命令,最終輸出結果,換句話說,就是隻在當前目錄下的java檔案中查詢字串

可能你拿到結果,還想記錄到檔案中,那麼可以用以下命令:

touch file.txt

find ./ -type f -name "*.java" | xargs grep -rn "待匹配字串" | info.txt

該命令將上面的結果通過管道輸出到檔案中,再配合一波excel,想幹啥幹啥

檔案裡就寫入了,如下圖

image

然後你又說我不用記錄,只想統計在該目錄下的java檔案裡出現了幾次,那就用:

find ./ -type f -name "*.java" | xargs grep -rn "待匹配字串" | wc -l
如下圖:

image

你可能又會說,我我查的字串是個方法名,我想檢視一下後面的函式體實現,但查出的檔案路徑好長,懶得cd進去,那你可以估算一下方法體的行數大小,從上面查詢到的檔案路徑和行號資訊,執行一下命令直接看

sed -n 100,200p "file.java的路徑"

該命令會將模板檔案的100-200行列印出來

如下圖:

image

有沒有更實用的場景呢,歡迎留言討論!

相關文章