ripgrep (rg) 快速搜索指南 #
rg 是一个比 grep 快10倍的代码搜索工具,需要手动安装。
安装方法 #
# macOS
brew install ripgrep
# Ubuntu/Debian
sudo apt install ripgrep
# CentOS/RHEL/Fedora
sudo dnf install ripgrep
# Windows
choco install ripgrep
scoop install ripgrep
# 验证安装
rg --version
基础用法 #
从简单开始 #
# 搜索关键词
rg "error" # 从当前目录递归搜索
# 忽略大小写
rg -i "error"
# 指定文件
rg "TODO" file.txt # 搜索单个文件
rg "TODO" src/ # 搜索指定目录
文件类型过滤 #
# 只搜索特定类型
rg "console" --type js # 只在JS文件中搜索
rg "SELECT" --type sql # 只在SQL文件中搜索
rg "TODO" --type md # 只在Markdown中搜索
# 文件名模式
rg "api" --glob "*.go" # 只搜索.go文件
rg "test" --glob "!*.test.js" # 排除测试文件
显示上下文 #
rg "bug" -C 2 # 显示前后各2行
rg "error" -B 3 # 显示前3行
rg "warning" -A 3 # 显示后3行
常用选项 #
rg -l "pattern" # 只显示文件名
rg -c "error" # 统计匹配次数
rg --files # 列出所有将被搜索的文件
rg -n "TODO" # 显示行号(默认开启)
限制结果条数 #
# 每个文件限制匹配数
rg "error" -m 5 # 每个文件最多5个匹配
rg "error" --max-count 5 # 完整写法
# 限制总行数
rg "error" | head -20 # 总共只显示前20行
# 快速预览
rg "TODO" -m 3 # 每个文件只看前3个匹配
rg -l "error" | head -5 # 只看前5个文件
搜索多个分离的字符串 #
# 同一行内的多个词
rg "error.*timeout" # error在前,timeout在后
rg "error.*timeout|timeout.*error" # 不限顺序
# 跨行搜索(用 -U 启用多行模式)
rg -U "import.*React[\s\S]*?useState" # import和useState可能在不同行
rg -U "async function[\s\S]{0,200}await" # 限制距离
# 分步搜索(适合距离很远的词)
rg -l "login" | xargs rg "password" # 找同时包含两个词的文件
# 实用例子
rg -U "try\s*\{[\s\S]*?\}\s*catch" # 匹配try-catch块
rg -U "class.*Component[\s\S]*?render" # 类定义到render方法
实战场景 #
代码审查 #
# 找所有TODO
rg "TODO|FIXME|HACK"
# 查找console.log
rg "console\.(log|debug)" --type js
# 找硬编码密钥
rg "api[_-]?key.*=.*['\"]"
调试排错 #
# 搜索错误日志
rg "ERROR|FATAL" logs/ -A 3
# 追踪函数调用
rg "getUserInfo\(" --type js -C 2
# 找特定变量使用
rg "\buserState\b" --type tsx
项目理解 #
# 统计使用的React Hooks
rg "^import.*use[A-Z]" --type tsx -o | sort | uniq -c
# 找所有API路由
rg "router\.(get|post|put|delete)" --type js
# 查看项目结构
rg --files | head -20
与 grep 对比 #
写法差异 #
# 递归搜索
grep -r "error" . # grep需要 -r
rg "error" # rg默认递归
# 搜索JS文件
grep -r "TODO" --include="*.js" . # grep复杂
rg "TODO" --type js # rg简洁
# 排除目录
grep -r "api" --exclude-dir=node_modules . # grep手动排除
rg "api" # rg自动忽略
核心区别 #
| 特性 | grep | rg |
|---|---|---|
| 速度 | 基准 | 快10倍+ |
| 默认递归 | 否 | 是 |
| 显示行号 | 需要 -n | 默认开启 |
| .gitignore | 不理解 | 自动遵守 |
| 语法高亮 | 无 | 有 |
| 二进制文件 | 会搜索 | 自动跳过 |
使用建议 #
- 用 rg:代码搜索、大型项目、需要性能
- 用 grep:系统日志、管道过滤、服务器运维
高级技巧 #
# 正则表达式
rg "func\s+\w+\(" --type go # Go函数定义
rg "^import.*from" --type js # JS导入语句
# 多行匹配
rg -U "class.*\{[\s\S]*?\}" # 匹配整个类定义
# 搜索隐藏文件
rg "config" --hidden
# 包括.gitignore忽略的文件
rg "password" --no-ignore
# 替换预览(不实际替换)
rg "old" --replace "new"
记住这5个 #
rg "keyword"- 基础搜索rg -i "keyword"- 忽略大小写rg "keyword" --type js- 指定文件类型rg "keyword" -C 2- 显示上下文rg -l "keyword"- 只显示文件名
掌握这5个命令,覆盖90%的使用场景。