高速命令行搜索工具 ripgrep 核心指南
全面介绍高速搜索工具 ripgrep:带你了解它如何在遵循忽略规则的前提下高效检索代码库,掌握安装与使用方法,并深入解析官方文档中的核心技术特性。
是什么
ripgrep(在命令行中以 rg 命令运行)是一款面向行的搜索工具,能够递归扫描目录结构,查找匹配正则表达式的内容。通俗地讲,“面向行”是指该工具会逐行扫描文档,仅展示包含目标关键词或匹配模式的具体行;“递归搜索”是指程序会从指定的目标目录开始,自动遍历所有层级的子文件夹,省去了用户逐个进入子目录搜索的麻烦;而“正则表达式”(通常简称为 regex)则是一种用于定义文本模式的特殊字符序列,能够轻松匹配特定的单词、变量名或复杂的文本格式。
ripgrep 的一大标志性特性是其开箱即用的内置过滤机制。在默认配置下,该工具会自动遵循 .gitignore、.ignore 和 .rgignore 文件中定义的排除规则。同时,它还会主动忽略隐藏目录、隐藏文件以及二进制文件(例如编译生成的应用程序二进制文件或媒体文件),避免让无法阅读的二进制乱码占满终端屏幕。当需要对所有文件进行全面彻底的搜索时,用户可以使用 rg -uuu 命令跳过这套自动过滤机制。
该工具对主流桌面和服务器操作系统提供了一流的支持,包括 Windows、macOS 和 Linux,并在每次官方发布时提供预编译好的二进制文件包。在日常命令行工作流中,ripgrep 的作用与 The Silver Searcher、ack 以及传统的经典 grep 等热门搜索工具相似。
根据项目 README 的介绍,ripgrep 的卓越性能归功于精心的架构设计以及与 Rust 语言正则表达式引擎的高效整合。其底层引擎依赖于有限状态自动机(一种逐步评估匹配模式的状态数学模型),并配合处理器的 SIMD(单指令多数据流)指令集来实现极速文本扫描。Unicode 解码逻辑被直接编译到确定性有限状态自动机(DFA)引擎中,使得完整的 Unicode 支持得以常态开启而不会牺牲搜索速度。此外,ripgrep 还利用了 crossbeam 与 ignore 库提供的无锁并行目录迭代器,通过 RegexSet 同时应用多条模式的忽略规则,并根据检索对象是单个文件还是整个目录树,动态选用内存映射文件(mmap)或带缓冲的流式读取。
能做什么
ripgrep 提供了丰富的实用功能,专门面向代码搜索、文件浏览和文本数据提取而设计:
- 自动与手动过滤: 除了自动跳过隐藏文件、二进制文件以及被 gitignore 忽略的文件外,ripgrep 还能限定或排除指定的文件类型。例如,执行
rg -tpy foo会将检索范围严格限制在 Python 文件内,而执行rg -Tjs foo则会从搜索结果中排除 JavaScript 文件。用户还可以自定义规则来识别全新的文件类型。 - 继承自 grep 的经典功能: 该工具保留了传统 grep 工具的标准核心功能,包括在匹配项周围显示上下文行、单条命令中搜索多个模式、以彩色高亮显示匹配文本,以及默认开启 Unicode 支持。
- 支持 PCRE2 引擎: 尽管 ripgrep 默认采用 Rust 的正则表达式引擎,但它也提供了对 PCRE2 正则引擎的可选支持。用户可以通过
-P/--pcre2参数、--auto-hybrid-regex选项(仅在需要时自动切换至 PCRE2)或--engine (default|pcre2|auto)配置项来启用。这让用户能够使用环视断言(look-around assertions)和反向引用(backreferences)等默认引擎不支持的高级模式匹配语法。 - 输出内容替换: 该工具提供了基础的替换支持,允许用户在终端展示结果前,根据匹配到的文本对输出行进行重写。
- 支持多种字符编码: 虽然默认以 UTF-8 为标准,但 ripgrep 也能通过
-E/--encoding参数搜索采用 latin-1、GBK、EUC-JP、Shift_JIS 以及 UTF-16(具备部分自动检测能力)等编码格式的文件。 - 直接检索压缩文件: 借助
-z/--search-zip参数,ripgrep 可以直接解压并搜索压缩包及压缩文件内部,支持 gzip、bzip2、xz、lz4、lzma、brotli 和 zstandard 等常见格式。 - 自定义预处理器: 该程序支持用户自定义输入预处理过滤器。这允许用户挂接外部脚本,在执行扫描前完成从 PDF 文档中提取纯文本、解密受保护文件或处理尚未内置支持的压缩格式等任务。
- 配置文件与多行检索: ripgrep 支持通过配置文件来固化用户常用的默认参数,具备跨越换行符匹配模式的多行搜索能力,并支持 passthru 透传功能。
根据项目 README 的记录,官方在一台 5.2 GHz 的 Intel i9-12900K 基准测试机器上展示了 ripgrep 处理各种搜索任务的性能表现。例如,在 Linux 内核源码仓库中全词匹配检索 [A-Z]+_SUSPEND 时,使用 rg -n -w '[A-Z]+_SUSPEND' 耗时仅需 0.082 秒;而在跳过 gitignore 规则且仅检索 C 语言文件时,使用 rg -uuu -tc -n -w '[A-Z]+_SUSPEND' 仅耗时 0.063 秒。对于单个保存在内存中、解压后达 13GB 的大文件(OpenSubtitles.raw.en.gz),运行 rg -w 'Sherlock [A-Z]\w+' 仅花费 1.042 秒便完成了搜索。README 中同时指出,当匹配到的结果数量极大时(例如在数百万行文本中运行 rg the),各大搜索工具的运行耗时会趋于接近,因为此时的性能瓶颈已转移至匹配项的处理与格式化输出,而非正则表达式的扫描算法本身。
怎么开始
ripgrep 的主可执行程序名为 rg。如果想在本地安装前先体验 ripgrep,项目文档推荐了位于 https://codapi.org/try/ripgrep/ 的非官方交互式教程,以及位于 https://codapi.org/ripgrep/ 的在线网页演练场。
GitHub 上为 Windows、macOS 和 Linux 提供了预编译的二进制压缩包,并且面向 Linux 和 Windows 系统提供了静态可执行文件。同时,各大主流包管理器也广泛收录了 ripgrep:
在 macOS 上使用 Homebrew 或在 Linux 上使用 Linuxbrew:
$ brew install ripgrep
在 macOS 上使用 MacPorts:
$ sudo port install ripgrep
在 Windows 上使用 Chocolatey:
$ choco install ripgrep
在 Windows 上使用 Scoop:
$ scoop install ripgrep
在 Windows 上使用 Winget:
$ winget install BurntSushi.ripgrep.MSVC
在 Arch Linux 上:
$ sudo pacman -S ripgrep
在 Fedora 上:
$ sudo dnf install ripgrep
在 openSUSE 上:
$ sudo zypper install ripgrep
在 Debian 和 Ubuntu 系统上:
$ sudo apt-get install ripgrep
Rust 开发者可以通过 Cargo 进行安装:
$ cargo install ripgrep
或者,也可以通过 cargo-binstall 安装预编译好的二进制文件:
$ cargo binstall ripgrep
若需直接从源码编译 ripgrep,系统中需要预先安装 1.96.0 或更高版本的 Rust:
$ git clone https://github.com/BurntSushi/ripgrep
$ cd ripgrep
$ cargo build --release
$ ./target/release/rg --version
若在源码编译时需要启用可选的 PCRE2 正则引擎支持:
$ cargo build --release --features 'pcre2'
安装完成后,即可直接在命令行中发起检索。若要在不使用自动过滤的情况下搜索所有文件:
rg -uuu
若要将搜索范围限制在 Python 文件中,或从搜索结果中排除 JavaScript 文件:
rg -tpy foo
rg -Tjs foo
若要搜索指定的单词模式并同时显示行号:
rg -n -w '[A-Z]+_SUSPEND'
若要对高频词进行全文检索:
rg the
价格与门槛
具体价格与方案以官方页面 https://github.com/BurntSushi/ripgrep 为准。ripgrep 属于开源软件,在 MIT License 或 UNLICENSE 条款下双重授权分发。
在系统门槛与环境要求方面,ripgrep 为 Windows、macOS 和 Linux 提供了一流支持,在各大 BSD 平台(FreeBSD、OpenBSD、NetBSD)以及 Haiku 上也有维护完善的软件包。面向 Linux 和 Windows 系统的预编译二进制文件均构建为静态可执行程序。若从源码编译构建,ripgrep 要求使用 1.96.0 或更新版本的 Rust 编译器;如果编译时选择启用可选的 PCRE2 支持,则需要通过 pkg-config 提供系统的 PCRE2 库,或借助 C 编译器从源码构建 PCRE2 并静态链接至最终的可执行文件中。
适合谁
ripgrep 专为软件开发人员、系统管理员、DevOps 专家以及经常需要在代码库和本地目录层级中进行检索的命令行用户而打造。项目 README 强调,它非常适合那些重视极速搜索性能、需要自动遵循 .gitignore 规则进行过滤、追求更少软件缺陷以及需要开箱即用 Unicode 支持的用户。
项目文档同时也列出了 ripgrep 可能并非最佳选择的几种具体场景:
- 需要严格遵循 POSIX 标准,或依赖在所有类 Unix 系统中无处不在、默认预装的工具(在此类场景下建议使用标准
grep)。 - 依赖其他搜索工具中独有的小众功能或特殊行为,而这些功能并未包含在 ripgrep 中。
- 处于某些特定的极端性能场景,在这些场景下其他替代工具有着更好的性能表现。
- 无法安装 ripgrep 或目标宿主平台尚不支持该工具的系统环境。
替代品
The Silver Searcher 是一款专为跨目录代码检索而设计的开源命令行工具。
ugrep 是一款支持文件系统查询与模式匹配的文件搜索工具。
来源
同类推荐
lazygit 指南:终端 Git 界面功能解析与上手实践
lazygit 是一款专为 Git 打造的终端界面工具,能大幅简化代码暂存、变基与分支管理流程。本文带你深入了解它的核心功能与安装入门方法。
开源自建相册 Immich:核心功能与入门部署指南
介绍开源自建照片与视频管理系统 Immich 的核心功能、多端体验与智能检索,并提供 Docker 快速部署指南与硬件门槛说明。
Vaultwarden 概览与入门指南:轻量级密码管理服务端
本文介绍基于 Rust 构建的开源密码管理服务端 Vaultwarden,解析其核心功能、部署流程、运行门槛以及与官方服务的区别。