如何在 macOS/Linux/Windows 安装 ripgrep (rg):正则搜索与 .gitignore
三大平台安装 rg,跑第一条正则搜索,并理解 .gitignore 如何过滤结果。
要在仓库里快速搜字符串,ripgrep(命令 rg)比 grep -r 更省事:默认尊重 .gitignore,用 Rust 写的并行搜索也快。本教程走 hereink 读者常用的 macOS、Linux 与 Windows 官方安装路径。
检索词是如何安装 ripgrep 并用正则搜索。读完应能在项目根目录跑第一条 rg,并知道怎样让结果自动跳过被忽略的文件。
ripgrep 解决什么问题
比 grep 少踩坑
grep -r 会扫进 node_modules、dist 和 .git,输出爆炸。rg 默认读 .gitignore、.ignore 和全局忽略规则,适合日常在代码库里找符号。
正则够用就好
rg 使用 Rust 正则引擎,支持 \d、分组、行首行尾等常见写法。不需要背全 POSIX;先会字面量、大小写和文件类型过滤就能覆盖八成场景。
在终端确认版本:
rg --version。官方仓库:github.com/BurntSushi/ripgrep。
在三大系统安装 rg
- 1macOS(Homebrew)
已装 Homebrew 时执行
brew install ripgrep。验证:which rg与rg --version。Apple Silicon 与 Intel 共用同一公式。 - 2Linux(发行版包)
Debian/Ubuntu:
sudo apt update && sudo apt install ripgrep。Fedora:sudo dnf install ripgrep。Arch:sudo pacman -S ripgrep。若仓库版本过旧,可从 GitHub Releases 下载对应架构的 tarball 解压并把rg放进PATH。 - 3Windows
在 PowerShell 或终端运行
winget install BurntSushi.ripgrep.MSVC,或从 GitHub Releases 安装 MSI。Scoop 用户:scoop install ripgrep。新开终端后跑rg --version。 - 4可选:用 Rust 安装
已装 Rust 工具链时:
cargo install ripgrep。编译较慢,但适合包管理器没有 rg 的环境。
基础正则搜索
# 字面量(默认大小写敏感)
rg "useState" src/
# 忽略大小写
rg -i "error" .
# 正则:以 function 开头的行
rg "^function\s+\w+" --type js
# 只列文件名
rg -l "TODO" .
# 显示行号并带上下文
rg -n -C 2 "api/v1" 在仓库根目录执行时,rg 会沿目录向上查找 .git 以定位项目根,并应用该处的忽略规则。
尊重 .gitignore 与例外
| 需求 | 命令 | 说明 |
|---|---|---|
| 默认行为 | rg pattern | 自动跳过 .gitignore 中的路径 |
| 也搜被忽略文件 | rg --no-ignore pattern | 调试生成物或本地配置时用,输出会很多 |
| 额外忽略 | rg --glob '!*.min.js' foo | 在默认规则上再排除一类文件 |
| 只搜某扩展名 | rg -t py "def main" | -t 与 --type-list 查看内置类型 |
- 适合
- 在 monorepo 或前端项目里找组件名、环境变量、TODO;CI 日志里快速定位报错文件。
- 不适合
- 需要修改文件内容(用编辑器或
sd/sed);跨二进制大文件全文索引(考虑专用工具)。
rg 和 grep 可以完全互换吗?
不能。rg 面向目录树搜索,默认递归并尊重忽略规则;grep 更适合管道和单文件。很多团队两者并存。
为什么搜不到 node_modules 里的字符串?
因为 node_modules 通常在 .gitignore 里。需要时用 rg --no-ignore 或进入该目录单独搜,并预期更慢、结果更多。
Windows 上 rg 找不到命令?
安装后关闭并重新打开终端。检查 where rg。winget/MSI 会把可执行文件放进 PATH;若用手动 zip,需自己把目录加入用户环境变量。
搜完代码要对齐方案
终端里定位到文件后,架构讨论仍适合摊在同一张图上。短会不必新工具栈,见 如何创建空间。