在開發過程中,我們常需要快速找出「哪個檔案用到了這個變數?」或是「那個設定檔到底放在哪裡?」。 本文整理了 Linux/Mac 終端機中最常用的搜尋指令:grepagfind


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 時搜尋內容grepgrep -rwn . -e "User"
搜尋檔案位置findfind . -name "*.json"

ag 與 find 的搜尋結果對比