ripgrep (rg) 命令

发布时间: 更新时间: 总字数:1049 阅读时间:3m 作者:IP:上海 网址

ripgrep(命令名为 rg)是使用 Rust 编写的现代化、跨平台递归文本搜索工具,定位是 grep 的高速替代品(同类工具还有 ack 与 The Silver Searcher ag)。本文整理 ripgrep 的核心特性、常用参数示例、与 grep 的用法对照表及各平台安装方法,适合在大型代码库中快速查找文本。

核心特性

  • 极致速度:基于 Rust 的并发搜索架构与专用正则引擎,速度通常显著快于 grep、ack、ag。默认正则引擎语法接近 ERE;如需 look-around、backreference 等特性,可加 -P(--pcre2,要求构建时启用 PCRE2 支持,可通过 rg --version 的 features 字段确认)。
  • 智能默认过滤:
    • 自动尊重 .gitignore、.ignore、.rgignore 中的过滤规则,不会搜索被忽略的文件;
    • 默认跳过隐藏文件与隐藏目录;
    • 默认跳过二进制文件。
  • 输出友好:默认彩色高亮匹配内容,按文件分组展示;连接终端(tty)时默认显示行号(等价于 grep -n)。
  • 跨平台:Linux、macOS、Windows 均有良好支持。

常用示例

bash
# 基础搜索:在当前目录递归搜索(rg 默认递归,无需 grep 的 -r)
rg "hello world"

# 忽略大小写
rg -i "error"

# 只搜索指定类型的文件(py 为 python 类型的别名)
rg -t py "import"

# 查看全部支持的文件类型
rg --type-list

# 显示匹配行的上下各 3 行(-A N 匹配行后 N 行,-B N 匹配行前 N 行)
rg -C 3 "password"

# 降低"智能过滤"级别(最多重复 3 次,等效关系逐级叠加)
rg -u "pattern"    # 等效 --no-ignore:不再遵守 .gitignore/.ignore/.rgignore
rg -uu "pattern"   # 等效 --no-ignore --hidden:额外搜索隐藏文件与目录
rg -uuu "pattern"  # 等效 --no-ignore --hidden --binary:额外搜索二进制文件

# 只列出包含匹配内容的文件名
rg -l "password"

# 统计每个文件的匹配行数 / 输出汇总统计信息
rg -c "error"
rg --stats "error"

# 全词匹配(匹配 cat,不匹配 category、tomcat)
rg -w "cat"

# 按 glob 过滤搜索范围
rg -g '*.go' "error"

# 固定字符串搜索(不做正则解析,无需转义)
rg -F "a.b(c)"

# 预览替换效果(仅在输出中显示替换结果,不会修改文件)
rg -r 'failure' "error"

# 作为管道过滤器使用(可省略文件名参数)
ps aux | rg sshd

与 grep 的常用参数对照

grep 用法rg 等价用法说明
grep -r PATTERN .rg PATTERNrg 默认递归搜索
grep -i PATTERNrg -i PATTERN忽略大小写
grep -n PATTERNrg PATTERN终端输出时行号默认开启
grep -l PATTERNrg -l PATTERN只列出匹配的文件名
grep -w PATTERNrg -w PATTERN全词匹配
grep -C 3 PATTERNrg -C 3 PATTERN显示上下文
grep -E PATTERNrg PATTERN默认正则语法接近 ERE,无需 -E
grep -F PATTERNrg -F PATTERN固定字符串匹配
grep -v PATTERNrg -v PATTERN反向匹配

安装

rg 通常不预装在 Linux 发行版中,需通过包管理器安装 ripgrep 软件包:

bash
# Ubuntu / Debian
sudo apt install ripgrep

# Fedora / RHEL 8+(旧版 CentOS 7 需先启用 EPEL 源)
sudo dnf install ripgrep

# Arch Linux
sudo pacman -S ripgrep

# macOS(Homebrew)
brew install ripgrep

安装完成后通过 rg --version 验证。

参考

  1. https://github.com/BurntSushi/ripgrep
  2. https://github.com/BurntSushi/ripgrep/blob/master/GUIDE.md