当前位置: 首页 > 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.gsyq.cn/news/1582492.html

相关文章:

  • 深圳华智信创|华为IdeaHub会议协作平板金牌代理商
  • 数字刊物系统用户操作手册
  • 【基础电子元件】电感
  • QPR(准比例谐振控制器)详解
  • 钢结构---柱基础二次浇筑的预留空间
  • 第一讲,c语言基础
  • 高效抢票实战指南:5分钟掌握大麦自动化购票技巧
  • 王牌操盘手怎么样?一文看懂其运营方法论与行业价值
  • 数字员工--前番
  • 磐创科技PCTG-1014型工业协议转换网关接线与组态配置指南
  • 存量RPA智能化改造指南:分阶段升级的技术落地顺序与企业架构重构实战
  • larksuite-cliskill
  • InDraw怎么调整键长、键角、键间距?
  • 2026英语重启阶段,很多人卡住的不是记不住单词,而是根本读不进去
  • 【Linux】章4 归档和传输文件(RH134知识点问答题)
  • 机械键盘连击克星:精准配置与智能过滤技术指南
  • GTA5线上小助手:5分钟掌握终极游戏增强方案,解锁洛圣都无限可能
  • 终极指南:如何免费掌控你的Alienware灯光、风扇与电源设置
  • 免费终极指南:5步使用League Director打造专业级英雄联盟视频
  • 指挥中心的控制台布局有多重要
  • 如何快速掌握TegraRcmGUI:Windows上最简单的Switch注入工具完整教程
  • Agent Skills:给 AI 编程助手装上技能包
  • LangGraph终极指南:构建弹性智能代理的架构设计与实战应用
  • AI Agent搭建:从概念到实战的痛与悟
  • Anisotropic Diffusion in ITK论文精读
  • 受够了 AICoding 跨 session 失忆?这个skill 让它能“无脑续命“
  • 江楚丽 | 广东工业大学电子商务专业在读生
  • 深圳编带机实测:2026年6月亲测哪款实用
  • AISMM模型到底颠覆了什么?3大底层架构突破、5类企业级应用场景、72小时实测性能数据首次公开
  • 在Windows上实现iPhone USB网络共享的完整解决方案:Apple-Mobile-Drivers-Installer