ripgrep:比 grep 快几十倍的命令行搜索工具 文章目录ripgrep比 grep 快几十倍的命令行搜索工具ripgrep比 grep 快几十倍的命令行搜索工具ripgrep简称 rg是一个基于正则表达式的命令行搜索工具获得 65,002 个 Starripgrep 用 Rust 编写默认递归搜索当前目录自动跳过 .gitignore 规则中的文件、隐藏目录和二进制文件。它支持 Windows、macOS 和 Linux每个版本都提供预编译二进制下载。项目采用 MIT 或 UNLICENSE 双许可协议。与 grep、ack、The Silver Searcher 等工具相比ripgrep 的核心优势是速度。作者在多个场景下做了基准测试在一个 13GB 文本文件OpenSubtitles 英语语料上搜索正则ripgrep 用时约 1 秒GNU grepUnicode 模式需要 6.5 秒。在 Linux 内核源码树中搜索[A-Z]_SUSPENDripgrep 用时 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 与 PCRE2ripgrep 兼容 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找到锚点后再用正则引擎验证上下文。这一策略在大多数实际搜索中非常有效因为用户输入的正则模式通常包含可直接匹配的字面文本。安装主流平台均支持一行命令安装macOSHomebrewbrew install ripgrepWindowsScoopscoop install ripgrepWindowsWingetwinget install BurntSushi.ripgrep.MSVCWindowsChocolateychoco install ripgrepUbuntu/Debiansudo apt-get install ripgrepFedorasudo dnf install ripgrepArch Linuxsudo pacman -S ripgrepopenSUSEsudo zypper install ripgrepFreeBSDsudo pkg install ripgrepNixnix-env --install ripgrepGentoosudo emerge sys-apps/ripgrepRust 用户可以cargo install ripgrep直接从 crates.io 安装。需要从源码编译的用户要求 Rust 1.85.0 或更新版本。何时不适用ripgrep 不是 POSIX 标准工具在需要跨平台兼容所有 Unix 系统的场景下grep 仍然更可靠。如果脚本依赖某些 grep 独有的特性替换前需要确认 ripgrep 是否支持。另外ripgrep 不能运行在所有平台上比如某些嵌入式环境这种情况也需要回退到 grep。总体来看ripgrep 在代码搜索场景下是一个完成度很高的工具。默认过滤、Unicode 支持、跨平台预编译二进制这三点降低了日常使用的门槛。对于经常在终端中搜索代码的开发者ripgrep 值得试一试。过滤、Unicode 支持、跨平台预编译二进制这三点降低了日常使用的门槛。对于经常在终端中搜索代码的开发者ripgrep 值得试一试。