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 仍然更適合。
主要差異:

簡單判斷:


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. 正規表示式

搜尋 TODOFIXME

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。

延伸閱讀