当前位置: 首页 > news >正文

ripgrep:比 grep 快几十倍的命令行搜索工具

文章目录

  • ripgrep:比 grep 快几十倍的命令行搜索工具

ripgrep:比 grep 快几十倍的命令行搜索工具

ripgrep(简称 rg)是一个基于正则表达式的命令行搜索工具,获得 65,002 个 Star:

ripgrep 用 Rust 编写,默认递归搜索当前目录,自动跳过 .gitignore 规则中的文件、隐藏目录和二进制文件。它支持 Windows、macOS 和 Linux,每个版本都提供预编译二进制下载。项目采用 MIT 或 UNLICENSE 双许可协议。

与 grep、ack、The Silver Searcher 等工具相比,ripgrep 的核心优势是速度。作者在多个场景下做了基准测试:在一个 13GB 文本文件(OpenSubtitles 英语语料)上搜索正则,ripgrep 用时约 1 秒,GNU grep(Unicode 模式)需要 6.5 秒。在 Linux 内核源码树中搜索[A-Z]+_SUSPEND,ripgrep 用时 0.082 秒,ack 用时 2.935 秒,差距超过 35 倍。

有意思的是,不同工具在不同场景下表现差异很大。比如搜索[A-Z]\w+ Sherlock [A-Z]\w+'这类没有字面量优化机会的模式时,ugrep 用时从 1.3 秒暴涨到 29 秒,而 ripgrep 仍然稳定在 1 秒左右。当匹配行数达到千万级别时(比如搜索常见单词the),所有工具的差距会缩小,因为瓶颈转向结果输出而非模式匹配本身。


默认过滤

ripgrep 默认开启递归搜索和自动过滤,遵循 .gitignore、.ignore、.rgignore 中的规则,跳过隐藏目录和二进制文件。用-uuu参数可以关闭所有自动过滤。这一设计对日常代码搜索很实用,大多数情况下不需要手动排除无关文件。

文件类型筛选

支持按文件类型限制搜索范围。rg -tpy foo只搜索 Python 文件,rg -Tjs foo排除 JavaScript 文件。文件类型匹配规则可以自定义扩展。对于已知的文件类型,ripgrep 内置了一套映射规则;用户也可以通过命令行参数添加新的类型定义。

Unicode 与 PCRE2

ripgrep 兼容 grep 的常用功能:上下文显示、多模式搜索、颜色高亮、完整 Unicode 支持。与 GNU grep 不同,ripgrep 在开启 Unicode 时仍然保持高速。它的正则引擎从底层就把 UTF-8 编解码整合进了有限自动机,不需要额外的编码转换步骤。

可选开启 PCRE2 引擎(-P参数),获得 look-around 和 backreference 支持。也可以用--auto-hybrid-regex让工具在需要时自动切换到 PCRE2。其他能力包括多行搜索、压缩文件搜索(brotli、gzip、zstd 等)和多种文本编码(UTF-16、GBK、Shift_JIS 等)。对于 PDF 等非纯文本文件,ripgrep 支持通过预处理器(preprocessor)进行文本提取后再搜索。

输出格式

ripgrep 支持--json参数以 JSON 格式输出搜索结果,方便与其他工具组合使用。比如配合 delta(一个支持语法高亮的 diff/pager 工具),可以用rg --json pattern | delta直接获得带语法高亮的搜索结果。也支持基本的替换功能(-r参数),可以根据匹配内容重写输出。


速度来源

ripgrep 之所以快,来自几个层面的设计。Rust 正则引擎把 UTF-8 解码直接构建进确定性有限自动机,避免传统 Unicode 处理的性能损耗。目录遍历使用无锁并行迭代器,由 crossbeam 和 ignore 库实现。内存映射和增量缓冲两种策略自动切换,单文件用内存映射,大目录用缓冲读取。.gitignore 规则用 RegexSet 编译,单个文件路径可以同时匹配多个 glob 模式,而不是逐条匹配。

搜索策略方面,ripgrep 优先查找字面量(literal),找到锚点后再用正则引擎验证上下文。这一策略在大多数实际搜索中非常有效,因为用户输入的正则模式通常包含可直接匹配的字面文本。


安装

主流平台均支持一行命令安装:

  • macOS(Homebrew):brew install ripgrep
  • Windows(Scoop):scoop install ripgrep
  • Windows(Winget):winget install BurntSushi.ripgrep.MSVC
  • Windows(Chocolatey):choco install ripgrep
  • Ubuntu/Debian:sudo apt-get install ripgrep
  • Fedora:sudo dnf install ripgrep
  • Arch Linux:sudo pacman -S ripgrep
  • openSUSE:sudo zypper install ripgrep
  • FreeBSD:sudo pkg install ripgrep
  • Nix:nix-env --install ripgrep
  • Gentoo:sudo emerge sys-apps/ripgrep

Rust 用户可以cargo install ripgrep直接从 crates.io 安装。需要从源码编译的用户,要求 Rust 1.85.0 或更新版本。


何时不适用

ripgrep 不是 POSIX 标准工具,在需要跨平台兼容所有 Unix 系统的场景下,grep 仍然更可靠。如果脚本依赖某些 grep 独有的特性,替换前需要确认 ripgrep 是否支持。另外,ripgrep 不能运行在所有平台上(比如某些嵌入式环境),这种情况也需要回退到 grep。

总体来看,ripgrep 在代码搜索场景下是一个完成度很高的工具。默认过滤、Unicode 支持、跨平台预编译二进制这三点,降低了日常使用的门槛。对于经常在终端中搜索代码的开发者,ripgrep 值得试一试。

过滤、Unicode 支持、跨平台预编译二进制这三点,降低了日常使用的门槛。对于经常在终端中搜索代码的开发者,ripgrep 值得试一试。

http://www.jsqmd.com/news/1070533/

相关文章:

  • 项目文档:基于MATLAB的音频增量调制编解码系统设计与实现
  • 计算机毕业设计之公司人员管理系统的设计与开发
  • QPR(准比例谐振控制器)详解
  • 硅基流动Token
  • 钢结构---柱基础二次浇筑的预留空间
  • 终极指南:3分钟快速上手DS4Windows,让PS4/PS5手柄在Windows电脑完美使用
  • 第一讲,c语言基础
  • 从扫描到搜索:OCRmyPDF如何智能转换PDF文档的完整指南
  • 折叠屏触控方案为何频频翻车,PEDOT导电膜给出新答案
  • 高效抢票实战指南:5分钟掌握大麦自动化购票技巧
  • AI 数据库优化:当机器学习遇见查询计划,内核级调优的实践路径
  • Cisco MDS交换机 log error
  • Codex CLI-12-团队协作与企业部署-从个人到生产的最佳实践
  • 2026跨境出海服务商实力盘点,本土企业出海合作优选指南
  • 5分钟快速解锁网易云音乐NCM文件:免费桌面工具完整指南
  • BetterNCM安装器终极指南:一键解锁网易云音乐无限功能
  • 终极指南:5分钟掌握DS4Windows,让PlayStation手柄在Windows上完美运行
  • 王牌操盘手怎么样?一文看懂其运营方法论与行业价值
  • 【部署Qwen3.5】Ubuntu系统使用Conda+Vllm方式部署Qwen3.5-27B
  • STM32C562开发(1)----点亮LED
  • 存量RPA智能化改造指南:分阶段升级的技术落地顺序与企业架构重构实战
  • 数字员工--前番
  • 磐创科技PCTG-1014型工业协议转换网关接线与组态配置指南
  • larksuite-cliskill
  • NS-USBLoader:一站式Switch文件管理与RCM注入的终极解决方案
  • InDraw怎么调整键长、键角、键间距?
  • 终极指南:如何用ncmdumpGUI轻松解锁网易云音乐的NCM加密音乐
  • MapLibre GL JS第64课:将弹窗附加到标记
  • MediaCreationTool.bat实战指南:Windows 10/11全版本部署与权限管理深度解析
  • 城通网盘下载终极指南:如何免费实现10倍速高速下载