ripgrep
ripgrep (rg) 是一個快速的文字搜尋工具,結合了 grep 的功能與現代化的使用體驗。
基本搜尋
簡單搜尋
rg pattern # 在當前目錄搜尋
rg pattern path/ # 在指定目錄搜尋
rg pattern file.txt # 在指定檔案搜尋
rg "multi word" # 搜尋多字串大小寫控制
rg -i pattern # 忽略大小寫 (case-insensitive)
rg -s pattern # 大小寫敏感 (case-sensitive)
rg -S pattern # 智慧大小寫 (有大寫則敏感)全字匹配
rg -w word # 完整單字匹配
rg '\bword\b' # 使用正規表達式的字邊界模式匹配
正規表達式
rg '^pattern' # 行首匹配
rg 'pattern$' # 行尾匹配
rg 'pat.*tern' # 任意字元匹配
rg 'pattern\d+' # 數字匹配
rg -P 'pattern' # 使用 PCRE2 引擎固定字串
rg -F 'literal.string' # 固定字串搜尋 (不解析正規表達式)
rg -F -f patterns.txt # 從檔案讀取多個固定字串多模式搜尋
rg -e pattern1 -e pattern2 # OR 搜尋多個模式
rg 'pattern1|pattern2' # 使用正規表達式 OR輸出控制
顯示格式
rg -n pattern # 顯示行號 (預設)
rg -N pattern # 不顯示行號
rg -H pattern # 顯示檔名 (預設)
rg --no-filename pattern # 不顯示檔名
rg -l pattern # 只顯示檔名
rg -c pattern # 只顯示每個檔案的匹配數量上下文顯示
rg -A 3 pattern # 顯示後 3 行 (After)
rg -B 3 pattern # 顯示前 3 行 (Before)
rg -C 3 pattern # 顯示前後各 3 行 (Context)輸出樣式
rg --color always pattern # 強制彩色輸出
rg --color never pattern # 無彩色輸出
rg --pretty pattern # 美化輸出 (含行號、標題)
rg --vimgrep pattern # Vim 格式輸出
rg --json pattern # JSON 格式輸出僅顯示匹配部分
rg -o pattern # 只顯示匹配的文字
rg -r '$1' 'pat(tern)' # 替換並顯示檔案過濾
檔案類型
rg -t go pattern # 只搜尋 Go 檔案
rg -T go pattern # 排除 Go 檔案
rg --type-list # 列出所有支援的檔案類型自訂檔案類型
rg --type-add 'web:*.{html,css,js}' -t web pattern
rg -g '*.go' pattern # 使用 glob 模式
rg -g '!*.min.js' pattern # 排除 glob 模式檔案路徑過濾
rg pattern -g 'src/**' # 只搜尋 src 目錄下
rg pattern -g '!test/**' # 排除 test 目錄
rg pattern -g '*.{go,rs}' # 多個副檔名隱藏檔案與忽略規則
rg -. pattern # 包含隱藏檔案
rg -u pattern # 不尊重 .gitignore (一次 u)
rg -uu pattern # 包含隱藏檔 + 不尊重 .gitignore
rg -uuu pattern # 搜尋所有檔案 (含二進位)搜尋範圍
限制搜尋
rg -m 5 pattern # 每個檔案最多 5 個匹配
rg --max-depth 2 pattern # 最大目錄深度
rg --max-filesize 1M pattern # 限制檔案大小反向搜尋
rg -v pattern # 顯示不匹配的行
rg --files-without-match pat # 顯示不含匹配的檔案檔案列表
rg --files # 列出所有會被搜尋的檔案
rg --files -g '*.go' # 列出特定類型檔案進階功能
多行搜尋
rg -U 'pattern1.*pattern2' # 跨行搜尋 (multiline)
rg -U 'start.*\n.*end' # 匹配多行內容字串替換 (顯示)
rg 'pattern' -r 'replacement' # 顯示替換後的結果
rg '(\w+)@(\w+)' -r '$2:$1' # 使用捕獲組統計與分析
rg --count pattern # 每個檔案的匹配計數
rg --count-matches pattern # 總匹配次數
rg --stats pattern # 顯示搜尋統計資訊預處理與壓縮
rg -z pattern file.gz # 搜尋壓縮檔案
rg --pre cat pattern # 使用預處理器
rg --pre-glob '*.pdf' --pre 'pdftotext' pattern效能優化
平行處理
rg -j 4 pattern # 使用 4 個執行緒
rg -j 1 pattern # 單執行緒執行記憶體控制
rg --mmap pattern # 使用記憶體映射 (預設)
rg --no-mmap pattern # 不使用記憶體映射快取與索引
rg --no-ignore-vcs pattern # 不讀取 .gitignore
rg --no-ignore-parent pattern # 不讀取父目錄的忽略檔特殊應用
搜尋特定內容
rg -t go 'func \w+' -o # 提取所有函數名稱
rg -t js 'import.*from' # 找出所有 import 語句
rg 'TODO|FIXME|XXX' # 找出程式碼註解標記二進位檔案
rg -a pattern # 搜尋二進位檔案
rg --binary pattern # 同上
rg --text pattern # 將二進位視為文字編碼處理
rg -E auto pattern # 自動偵測編碼
rg -E utf-8 pattern # 指定 UTF-8 編碼
rg -E none pattern # 不做編碼轉換搜尋檔案內容類型
rg --type-add 'config:*.{yml,yaml,toml,json}' -t config pattern
rg --iglob '**/*.{log,txt}' pattern除錯
偵錯資訊
rg --debug pattern # 顯示詳細偵錯資訊
rg --trace pattern # 顯示追蹤資訊
rg --files --debug # 偵錯檔案列表測試與驗證
rg --pcre2-version # 顯示 PCRE2 版本
rg --type-list # 列出所有類型定義設定檔
使用設定檔
# ~/.ripgreprc 或專案 .ripgreprc
--smart-case
--colors=path:fg:green
--max-columns=150export RIPGREP_CONFIG_PATH=~/.ripgreprc
rg pattern # 自動載入設定實用範例
# 找出所有 Go 檔案中的 TODO
rg -t go 'TODO|FIXME' -C 2
# 搜尋 API 端點定義
rg -t go 'router\.(GET|POST|PUT|DELETE)' -o
# 找出大型函數 (超過 50 行)
rg -U '^func .*\{$' -A 50 | rg '^}$' -c
# 搜尋 SQL 注入風險
rg -t go 'Exec\(.*\+'
# 找出未使用的變數 (簡化)
rg -t go '^\s+\w+\s+:=' --no-filename | sort | uniq -c
# 比較兩個分支的差異
rg -l 'pattern' > /tmp/current.txt
git checkout other-branch
rg -l 'pattern' > /tmp/other.txt
diff /tmp/current.txt /tmp/other.txt
# 找出重複程式碼
rg -C 3 'pattern' | sort | uniq -d
# 效能分析:找出慢查詢
rg -t sql 'SELECT.*FROM.*WHERE' --stats使用技巧
- 結合其他工具:
rg pattern | fzf(模糊搜尋) - 管道處理:
rg -l pattern | xargs sed -i 's/old/new/g' - 版本控制整合:
rg --files | entr rg pattern(自動重新搜尋) - 別名設定:
alias rgg='rg --pretty --context 3'