【Linux命令】在當前目錄下查找出現特定字元串的文件位置資訊
有時候我們我會碰到這樣的問題:我要查找一個字元串在多個文件里總共出現了幾次,或者一個方法、一個函數在項目里調用了幾次,都在哪裡調用,那我們要如何查找,如何統計這些資訊呢?
場景復現
首先,要查找字元串,肯定優先考慮全局搜索命令grep(global search regular expression and print out the line:正則匹配全局搜索並列印行)。如果搜索的範圍比較不明確,只知道在某個文件夾下,那可以先cd該目標路徑,然後用以下最簡單的命令:
grep -rn "待匹配字元串" ./
r :表示遞歸,
n :表示查詢結果顯示行號
結果是這樣的:
【文件路徑】:【行號】 【當前行資訊】
如下圖:

如果你知道的範圍縮小了,或者只想在一些特定類型的文件中查找,比如,只想在該目錄下的所有java文件查找,可以用以下的方式:
find ./ -type f -name "*.java" | xargs grep -rn "待匹配字元串"
如下圖:

該命令的作用是在當前目錄下,查找所有java文件,然後將每個文件的路徑作為參數傳給
grep "待匹配字元串"命令,最終輸出結果,換句話說,就是只在當前目錄下的java文件中查找字元串
可能你拿到結果,還想記錄到文件中,那麼可以用以下命令:
touch file.txt
find ./ -type f -name "*.java" | xargs grep -rn "待匹配字元串" | info.txt
該命令將上面的結果通過管道輸出到文件中,再配合一波excel,想幹啥幹啥
文件里就寫入了,如下圖

然後你又說我不用記錄,只想統計在該目錄下的java文件里出現了幾次,那就用:
find ./ -type f -name "*.java" | xargs grep -rn "待匹配字元串" | wc -l
如下圖:

你可能又會說,我我查的字元串是個方法名,我想查看一下後面的函數體實現,但查出的文件路徑好長,懶得cd進去,那你可以估算一下方法體的行數大小,從上面查詢到的文件路徑和行號資訊,執行一下命令直接看
sed -n 100,200p "file.java的路徑"
該命令會將模板文件的100-200行列印出來
如下圖:

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