grep 幾乎每台 Unix 都有,rg 對程式碼目錄通常更快,也會尊重 .gitignore。搜尋前先決定要找固定字串還是正規表示式,能少掉很多跳脫問題。
動手前:不要直接掃含密碼、金鑰或個資的整顆磁碟後把輸出貼到公開工單。大型目錄先限制路徑、檔案類型與排除項目。
grep 基本搜尋
搜尋單一檔案Linux/macOS
grep 'error' app.log預設區分大小寫。
忽略大小寫Linux/macOS
grep -i 'error' app.log會同時命中 Error、ERROR 等。
顯示行號Linux/macOS
grep -n 'listen' nginx.conf方便回到編輯器定位。
反向篩選Linux/macOS
grep -v 'healthcheck' access.log顯示不符合條件的行。
固定字串搜尋Linux/macOS
grep -F 'a.b[c]' file.txt-F 不把 . [ ] 當正規表示式。
只顯示符合的片段Linux/macOS
grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' access.log只做文字形狀比對,未驗證 IP 每段是否小於 256。
顯示前後 3 行Linux/macOS
grep -n -C 3 'Exception' app.log-A 與 -B 可分別只看後文或前文。
計算符合行數Linux/macOS
grep -c 'ERROR' app.log計算符合的行,不是總命中次數。
只列出命中的檔名Linux/macOS
grep -Rl 'deprecated_setting' config/適合先找受影響檔案。
搜尋多個條件Linux/macOS
grep -E 'ERROR|WARN' app.log使用擴充正規表示式。
ripgrep/rg
遞迴搜尋目前專案rg
rg 'database_url' .預設尊重 .gitignore 並略過隱藏與二進位檔。
忽略大小寫rg
rg -i 'timeout' logs/適合錯誤訊息大小寫不一致時。
只搜特定副檔名rg
rg 'TODO' -g '*.py' src/-g 用 glob 限制檔案。
排除 vendor 與 min.jsrg
rg 'old-api' . -g '!vendor/**' -g '!*.min.js'排除規則前面加 !。
包含隱藏檔rg
rg --hidden 'token_name' . -g '!.git/**'可能碰到 .env;輸出分享前先遮蔽值。
列出會被搜尋的檔案rg
rg --files -g '*.conf'只列清單,不搜尋內容。
顯示兩行前後文rg
rg -C 2 'connection refused' logs/適合保留錯誤上下文。
只輸出命中檔名rg
rg -l 'feature_flag' config/後續批次修改前先審核這份清單。
怎麼確認有做對
- 用固定字串與正規表示式各抽查幾筆,確認沒有誤判。
- 搜尋結果帶行號時回到原檔查看上下文。
- 大型結果先用 -l 或 --count 摘要,不要直接貼完整內容。
常見錯誤
- 把使用者輸入直接當正規表示式。
- 搜尋範圍太大,把 build、vendor、備份與二進位檔一起掃。
- 以為 rg 預設會搜尋隱藏檔與被 ignore 的檔案。
- 把含密碼或 token 的命中行貼到外部。
版本與官方文件
參數會隨工具版本與作業系統實作改變。正式環境先用 --help、-h 或系統內建說明確認,再以當版官方文件為準。