--- title: ripgrep:現代化搜尋利器(rg) tags: [Tool, CLI, Linux, MacOS, Search, Rust] --- # ripgrep:現代化搜尋利器(rg) [文章更新時間: 2026-01-23 13:34] ![ripgrep](https://hackmd.io/_uploads/SkNnphV8bl.jpg) ## 📖 簡介 **ripgrep** 是一款由 Rust 編寫的命令行搜尋工具。它的功能與經典的 `grep` 類似,但在速度、預設行為和易用性上有了質的飛躍。它能遞迴地在目錄中搜尋正規表示式(Regular Expression)匹配的內容,並聰明地跳過你不想搜尋的檔案。 --- ## 🌟 為什麼選擇 ripgrep?(優點) * **極致的速度**:在多數基準測試中,ripgrep 是目前最快的搜尋工具,超越了 `grep`、`ack` 與 `ag` (The Silver Searcher)。 * **聰明的預設行為**: * 自動尊重你的 `.gitignore` 檔案。 * 自動跳過隱藏檔案與資料夾(如 `.git`)。 * 自動跳過二進位檔案。 * **強大的 Unicode 支援**:基於 Rust 的正規表示式引擎,原生支援 Unicode。 * **彩色輸出**:預設提供易於閱讀的彩色標記,區分檔名、行號與匹配內容。 * **跨平台**:在 macOS、Linux 與 Windows 上都能完美運行。 --- ## 🛠️ 安裝步驟 你可以根據你的作業系統選擇對應的安裝方式: ### macOS 使用 Homebrew 安裝是最簡單的方式: ```bash brew install ripgrep ``` ### Linux * **Ubuntu/Debian**: ```bash sudo apt install ripgrep ``` * **Arch Linux**: ```bash sudo pacman -S ripgrep ``` * **Fedora**: ```bash sudo dnf install ripgrep ``` ### Rust 開發者 如果你有安裝 Rust 環境,也可以透過 Cargo 安裝: ```bash cargo install ripgrep ``` --- ## ⌨️ 基礎操作步驟 安裝完成後,指令名稱為 `rg`。 ### 1. 基本搜尋 搜尋目前目錄下所有檔案中的關鍵字: ```bash rg "search_term" ``` ### 2. 指定目錄搜尋 ```bash rg "search_term" ./src ``` ### 3. 常用參數組合 | 參數 | 說明 | | --- | --- | | `-i` | 忽略大小寫 (ignore case) | | `-w` | 匹配整個單字 (word boundary) | | `-v` | 反向匹配 (顯示不包含該字串的行) | | `-e` | 正則(regex)匹配 | | `-r` | 替換文字 | | `-l` | 僅列出檔案名稱,不列出具體行內容 | | `-n` | 顯示行號 (預設已開啟) | | `-t` | 僅查詢指定檔案類型 | | `-p` | 開啟顏色, 行數 | | `-h` | 使用說明 | --- ## 💡 使用情境介紹 ### 情境 A:在大規模專案中尋找 Function 定義 當你接手一個超大型專案,想知道 `handleUserLogin` 在哪裡被定義,直接輸入: ```bash rg -w "handleUserLogin" ``` 因為 `rg` 會自動過濾掉 `node_modules` 或 `.git` 目錄,搜尋會瞬間完成。 ### 情境 B:搜尋特定的檔案類型 如果你只想在 Python 檔案中搜尋某個關鍵字: ```bash rg "import pandas" -t py ``` ### 情境 C:結合其他工具 (Pipeline) 你可以將搜尋結果傳遞給其他工具處理。例如,尋找所有包含 "TODO" 的檔案並統計數量: ```bash rg "TODO" --count ``` --- ## 🚀 進階用法 ### 1. 顯示前後文 (Context) 這在 Debug 時非常有用,可以看到匹配行周圍的程式碼: * `-A 3`: 顯示匹配行後 (After) 3 行。 * `-B 3`: 顯示匹配行前 (Before) 3 行。 * `-C 3`: 顯示前後 (Context) 各 3 行。 ```bash rg "error_handler" -C 3 ``` ### 2. 取代功能 (Replace) 雖然 `rg` 主要用於搜尋,但它支援 `--replace` 參數來預覽取代後的結果(通常配合管道使用): ```bash rg "old_name" --replace(-r) "new_name" ``` ### 3. 使用配置檔案 如果你不喜歡每次都輸入某些參數(例如你想包含隱藏檔案),你可以建立一個配置文件。 1. 在家目錄建立 `.ripgreprc`。 2. 在環境變數中加入 `export RIPGREP_CONFIG_PATH="$HOME/.ripgreprc"`。 3. 在檔案中寫入: ```text --smart-case --max-columns=150 ``` ### 4. 正則表達式 `rg` 支援 PCRE2(需加 `-P` 參數),這讓你處理複雜的搜尋模式: ```bash rg -P "\d{3}-\d{3}-\d{4}" # 搜尋電話號碼格式 ``` ### 5. 超級模糊搜尋:ripgrep + fzf (模糊搜尋整合) 如果你覺得 rg 的輸出太長,可以結合 fzf 實現互動式搜尋,這會讓你一邊輸入關鍵字,一邊即時過濾搜尋結果。 用下面的方式設定 alias 後可以使用 `rgf` 啟動互動式查詢 Bash ``` # 在 .bashrc 或 .zshrc 加入此別名 alias rgf='rg --line-number --column --no-heading --color=always --smart-case . | fzf --ansi' ```