在開發過程中,我們常需要快速找出「哪個檔案用到了這個變數?」或是「那個設定檔到底放在哪裡?」。
本文整理了 Linux/Mac 終端機中最常用的搜尋指令:grep、ag 和 find。
1. 搜尋檔案內容 (grep)
grep 是系統內建最強大的文字搜尋工具。
常用指令
# 在目前目錄 (./) 遞歸搜尋 "R2"
grep -rwn --color=auto ./ -e 'R2'
參數詳解
-r(recursive):遞歸搜尋,包含所有子目錄。-w(word):僅匹配「完整單字」,避免匹配到部分字串(例如搜尋is不會匹配到this)。-n(line number):顯示行號。-e(pattern):指定搜尋的關鍵字。--color=auto:將關鍵字高亮顯示。
顯示前後文 (Context)
有時候只看一行不夠,我們需要看前後幾行程式碼:
# -C (Context): 顯示前後各 1 行
grep -rwn -C 1 ./ -e 'R2'
# -A (After): 顯示後 1 行
# -B (Before): 顯示前 1 行
2. 更快的選擇:The Silver Searcher (ag)
grep 雖然強大,但速度較慢且指令較長。ag 是一個專為程式碼搜尋設計的工具,速度極快且預設忽略 .gitignore 的檔案。
(需額外安裝:brew install the_silver_searcher)
常用指令
# 語法超簡單:ag "關鍵字" [路徑]
ag "R2" ./
顯示前後文
# 顯示前後 1 行
ag -C 1 "R2" ./
優點:
- 速度比
grep快非常多。 - 輸出結果自帶顏色和行號,閱讀性佳。
- 指令簡短。
3. 搜尋檔案名稱 (find)
如果你不是要找「內容」,而是要找「檔案在哪裡」,請用 find。
常用指令
# 搜尋目前目錄下,檔名為 "config.json" 的檔案
find ./ -name "config.json"
使用萬用字元 (*)
# 搜尋以 "測試" 開頭的檔案
find ./ -name "測試*"
# 搜尋包含 "Lib" 的檔案
find ./ -name "*Lib*"
限制搜尋深度
# 只搜尋第一層目錄,不進入子資料夾
find ./ -maxdepth 1 -name "*vscode*"
總結:該用哪一個?
| 需求 | 推薦工具 | 指令範例 |
|---|---|---|
| 搜尋程式碼內容 | ag (首選) | ag "User" . |
| 沒裝 ag 時搜尋內容 | grep | grep -rwn . -e "User" |
| 搜尋檔案位置 | find | find . -name "*.json" |
ag 與 find 的搜尋結果對比