补充说明
rg 是 BurntSushi 用 Rust 编写的搜索工具,可视为 grep -R 的现代替代品。它默认递归遍历、自动跳过隐藏文件和 .gitignore 中忽略的路径、跳过二进制文件,并利用多线程和正则引擎获得很高吞吐,是代码检索的常用工具。
默认输出带行号和文件名,匹配部分高亮;在管道中会自动关闭颜色和行号。它支持正则、固定字符串、按文件类型过滤(-t)、glob 过滤(-g)、上下文行、替换输出等。需要搜索隐藏文件或被忽略的目录时,用 --hidden 和 -u/-uu/-uuu 逐级放宽。
注意 ripgrep 默认不使用 PCRE2,若需要后行断言等特性要加 -P(构建时需启用)。搜索压缩包内容需加 -z。它的退出码与 grep 类似:0 表示有匹配,1 表示无匹配,2 表示出错,便于脚本判断。
语法
rg [选项] 模式 [路径...]
选项
-i:忽略大小写-S:智能大小写(有大写字母时区分)-w:只匹配完整单词-F:把模式当作固定字符串-l:只列出包含匹配的文件名-n/-N:显示 / 隐藏行号-A/-B/-C <行数>:显示匹配后 / 前 / 前后文-g <glob>:按文件名过滤-t <类型>/-T <类型>:包含 / 排除文件类型--hidden:搜索隐藏文件-u:不遵守 ignore 规则(可叠加到-uuu)-o:只输出匹配到的部分-r <替换>:以替换文本输出匹配-P:使用 PCRE2 正则引擎
实例
# 在当前项目里搜索函数名
rg 'def main\('
# 忽略大小写并只搜 Python 文件
rg -i -t py 'timeout'
# 列出包含 TODO 的文件
rg -l 'TODO|FIXME'
# 显示匹配前后各两行
rg -C 2 'connection refused'
# 搜索隐藏文件与 .gitignore 忽略的内容
rg -uu 'secret'
# 用 glob 排除测试目录
rg 'panic!' -g '!**/test/**'
# 只输出匹配文本并去重
rg -o '\b[A-Z]{3}-\d+\b' | sort -u
# 统计每个文件的匹配行数
rg -c 'error' --sort path