rg 常用指令指南
rg 常用指令指南
rg 預設會遞迴搜尋目前目錄,並自動遵守 .gitignore、忽略隱藏檔案、二進位檔案及部分不需要搜尋的內容。這使它比傳統 grep 更適合日常軟體開發。
rg 與 grep 的比較
grep 是 Unix 系統常見的文字搜尋工具,適合單一檔案、管線輸入與簡單搜尋;rg 則更適合在程式碼專案中遞迴搜尋。
| 比較項目 | rg |
grep |
|---|---|---|
| 主要用途 | 搜尋專案與大量檔案 | 搜尋文字、管線與系統檔案 |
| 遞迴搜尋 | 預設遞迴 | 需要 -r 或 -R |
.gitignore |
預設遵守 | 預設不遵守 |
| 隱藏檔案 | 預設忽略 | 通常由指定路徑與 Shell 決定 |
| 二進位檔案 | 預設跳過 | 依實作與選項處理 |
| 搜尋速度 | 通常適合大型程式碼目錄 | 單檔與簡單管線仍很實用 |
| 檔案類型 | 內建 -t/-T |
通常使用 --include/--exclude |
| Glob 過濾 | -g |
GNU grep 使用 --include/--exclude |
| Regex 預設 | Rust regex | BRE |
| Extended Regex | 預設已具備常用語法 | 使用 grep -E |
| PCRE | rg -P |
GNU grep 可使用 grep -P |
| 輸出替換 | -r,但不修改檔案 |
沒有相同輸出替換功能 |
| 可攜性 | 需要額外安裝 | Unix/Linux 環境幾乎都有 |
| POSIX | 不屬於 POSIX 工具 | grep 是標準 Unix 工具 |
| 最適合 | 開發者搜尋 Source Code | Shell Script、Server、精簡環境 |
rg 官方也特別指出:需要速度、智慧過濾與 Unicode 支援時適合使用 rg;需要可攜性、普遍存在性或 POSIX 相容性時,傳統 grep 仍然更適合。
主要差異:
rg沒有指定路徑時會自動遞迴搜尋目前目錄;grep通常要加-R和路徑。rg預設遵守.gitignore,會避開node_modules、build output 等不該搜尋的內容。rg預設忽略隱藏檔與二進位檔案;需要時再用--hidden或--no-ignore打開。grep幾乎每台 Unix-like 系統都有,寫可攜式 shell script 時仍然很有用。
簡單判斷:
- 專案內找程式碼、設定檔、Markdown:優先用
rg。 - 管線處理、最小環境、POSIX script:用
grep。
1. 安裝
macOS
brew install ripgrep
Ubuntu / Debian
sudo apt update
sudo apt install ripgrep
Fedora
sudo dnf install ripgrep
確認版本
rg --version
2. 基本搜尋
rg [選項] 搜尋內容 [路徑]
rg "keyword"
常用範例:
rg "useEffect"
rg "TODO"
rg "api/users"
搜尋結果通常包含:
- 檔案路徑
- 行號
- 符合的文字
3. 指定檔案或資料夾
只搜尋某個資料夾:
rg "keyword" src
搜尋多個位置:
rg "keyword" app components lib
只搜尋特定檔案:
rg "keyword" package.json
4. 檔案類型篩選
只搜尋 TypeScript:
rg "useState" -t ts
只搜尋 Markdown:
rg "延伸閱讀" -t md
排除某種檔案類型:
rg "console.log" -T js
常見 type:
| Type | 檔案 |
|---|---|
js |
JavaScript |
ts |
TypeScript |
tsx |
TSX |
md |
Markdown |
json |
JSON |
py |
Python |
查看所有支援的 type:
rg --type-list
5. 使用 glob 篩選路徑
只搜尋某種副檔名:
rg "keyword" -g "*.md"
排除資料夾:
rg "keyword" -g "!node_modules"
排除測試檔:
rg "keyword" -g "!*.test.ts"
同時包含與排除:
rg "keyword" -g "*.ts" -g "!*.d.ts"
6. 大小寫與精確搜尋
忽略大小寫:
rg -i "keyword"
智慧大小寫:搜尋字串全小寫時忽略大小寫,包含大寫時精確比對。
rg -S "keyword"
完整單字:
rg -w "user"
固定字串,不把搜尋內容當正規表示式:
rg -F "user.name"
7. 正規表示式
搜尋 TODO 或 FIXME:
rg "TODO|FIXME"
搜尋 email 格式:
rg "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
搜尋行首是標題的 Markdown:
rg "^## "
8. 輸出控制
只顯示檔名:
rg -l "keyword"
只顯示符合次數:
rg -c "keyword"
顯示前後文:
rg -C 2 "keyword"
只顯示前文或後文:
rg -B 2 "keyword"
rg -A 2 "keyword"
不顯示行號:
rg -N "keyword"
9. 搜尋隱藏檔與被忽略檔案
包含隱藏檔:
rg --hidden "keyword"
不理會 .gitignore:
rg --no-ignore "keyword"
搜尋所有內容,但仍排除 .git:
rg --hidden --no-ignore -g "!.git" "keyword"
10. 列出檔案
列出目前會被 rg 搜尋的檔案:
rg --files
只列出 Markdown:
rg --files -g "*.md"
找檔名:
rg --files | rg "config"
11. 日常查找範例
找某個函式在哪裡被使用:
rg "getUser"
找所有還沒處理的註解:
rg "TODO|FIXME|HACK"
找 Next.js Client Component:
rg '"use client"' -g "*.tsx"
找 Markdown 筆記中的 Obsidian 連結:
rg "\\[\\[[^\\]]+\\]\\]" -g "*.md"
找沒有被 Git 忽略規則排除的檔案:
rg --files
12. 快速查詢表
| 需求 | 指令 |
|---|---|
| 搜尋文字 | rg "keyword" |
| 指定資料夾 | rg "keyword" src |
| 忽略大小寫 | rg -i "keyword" |
| 完整單字 | rg -w "keyword" |
| 固定字串 | rg -F "user.name" |
| 只顯示檔名 | rg -l "keyword" |
| 顯示前後文 | rg -C 3 "keyword" |
| 只搜 Markdown | rg "keyword" -t md |
| glob 篩選 | rg "keyword" -g "*.ts" |
| 排除檔案 | rg 'text' -g '!node_modules/**' |
| 搜尋隱藏檔 | rg --hidden "keyword" |
| 列出檔案 | rg --files |
| 搜尋指定副檔名 | rg 'text' -g '*.sql' |
| 搭配 fzf | rg --files | fzf |
日常開發可以把 rg 當成主要搜尋工具,把 grep 保留給系統管理、管線處理與可攜 Script。
延伸閱讀
- Shell 快捷鍵指南 — 搭配快捷鍵提升搜尋與編輯效率。
- Git 常用指令指南 — 查找變更、分支與歷史時常搭配
rg使用。 - tmux 常用指南 — 在多 Pane 工作區中同時搜尋、測試與查看 Log。