news 2026/9/12 5:07:54

grep 转了半分钟?rg 搜正则到底快在哪

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
grep 转了半分钟?rg 搜正则到底快在哪

grep 转了半分钟?rg 搜正则到底快在哪

【免费下载链接】ripgrepripgrep recursively searches directories for a regex pattern while respecting your gitignore项目地址: https://gitcode.com/GitHub_Trending/ri/ripgrep

打开一个三万行的老仓库,想找某个工具函数的调用点。grep -r转了半分钟还在爬目录,结果里混着 .git 和 node_modules 的噪音。装个 ripgrep(命令叫 rg),一条命令递归搜正则,被 git 忽略的文件默认就不碰——这就是它让人停不下来的原因。

rg 默认替你做什么:少配置、少踩坑

传统 grep 的默认行为很"老实":不忽略任何东西,遇到二进制文件也硬读,单线程一个文件一个文件地过。ripgrep 的默认行为是开发者视角:.gitignore.ignore、隐藏目录这些它全看,二进制文件直接跳过,输出自动带颜色和行号。

传统 grepripgrep
忽略规则手动写参数默认遵守 gitignore
并发单线程多线程遍历目录
二进制文件硬读自动跳过
上手成本参数多零配置可用

落点很实际:少写参数,少等,少被噪音干扰。你不用先想"要不要加 -r、要不要排除 .git",它替你想好了。

5 分钟跑通第一条 rg 搜索 🚀

装好后(apt、brew、choco 等包管理器都有 ripgrep),进任何项目目录,直接跑:

rg "fn main" -t rust

白话解释:在 Rust 类型的文件里找fn main-t rust按文件类型筛选,等价于只查 .rs 文件。结果自带行号,匹配处高亮,文件路径清清楚楚。递归是默认行为,不用加-r;行号默认显示,不用加-n。就这么简单,不用再背一堆反斜杠参数。

用顺手之后才试的三个场景

项目里有些生成目录 gitignore 没覆盖?在项目根放一个.rgignore,写法跟 gitignore 一样,全团队共享:

/target/ *.log

只想看哪些文件命中,不想看行内容?rg -l "TODO"只列文件名;rg -c "TODO"给每个文件直接计数。适合先摸个大概、再决定细看哪个文件。

要把结果喂给脚本或编辑器?切 JSON 输出,机器可读,管道里怎么加工都行:

rg -j "TODO" | jq -r '.[].data.lines.text'

JSON 输出的构造在 crates/printer/src/json.rs,字段结构稳定,写解析脚本不慌。

rg 快在哪:并行与跳过机制 📊

别把速度全归因于"Rust 天生快",它的加速是分层的。

并行:遍历目录不是一个人从头翻到尾,而是多个线程各领一片目录树,调度实现在 crates/ignore/src/walk.rs,用 work-stealing 队列让空闲线程去抢别人的活,核数越多越快。

跳过机制:二进制文件默认根本不打开,gitignore 里的目录连 stat 都省了。大型仓库 90% 的路径在这一层就被甩掉。

内存映射:大文件用 mmap 交给操作系统的缺页机制,不用自己分块读,内存占用可控。

字面量快速通道:像\w+foo\w+这种模式,会先抽出其中的foo快速定位候选行,再只对这几行跑完整正则。这条优化在 crates/regex/src/matcher.rs。

一句话概括:先扔掉大部分文件,再对剩下的文件做更快的匹配。

把 rg 顺手融进日常

两个今天就能做的小动作。

给 shell 加个别名,带上你每次都敲的参数:

alias rgsm='rg --smart-case --line-number'

在编辑器设置里确认全局搜索后端用的是 rg(主流编辑器多数默认就是),大项目里搜索立刻快一个量级。

三个真会撞上的坑

颜色消失了:rg 只在终端直连时自动开色,输出接到管道就变纯文本。想要颜色,显式加--color=always

搜 "a.b" 搜不出 "a.b":点、括号、问号在正则里是元字符。想按字面找,加-F关掉正则解释。

写了 ~/.ripgreprc 却不生效:rg 不自动加载用户配置,得设RIPGREP_CONFIG_PATH指向那个文件,里面每行一个参数,比如--smart-case

收束

适合所有天天在终端里翻代码的人:项目越老、仓库越大,它省的时间越夸张。下次 clone 完仓库,先试一句rg -t py "def ",你会知道 grep 那半分钟是怎么过去的。

【免费下载链接】ripgrepripgrep recursively searches directories for a regex pattern while respecting your gitignore项目地址: https://gitcode.com/GitHub_Trending/ri/ripgrep

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 5:06:37

Mermaid流程图代码化:让流程图不再重复手工重绘

很多团队的流程图,一直停留在“画一遍、改一遍、再重画一遍”的状态。产品逻辑变了,流程图要重画;需求文档更新了,架构图要重画;评审会上大家对着图争论,回头发现图又落后于代码。真正的问题不是画图的技巧…

作者头像 李华
网站建设 2026/9/12 5:07:31

Claude Admin API实战:SDK与CLI实现API Key组织级管理

在多人协作中,Claude 的 API Key 一旦进入日常开发流程,管理难度通常不是来自接口调用,而是来自密钥本身:谁创建了它,属于哪个工作空间,还能不能用,是不是已经泄露。很长时间里,这些…

作者头像 李华
网站建设 2026/9/12 5:07:03

AI Agent开发实战:从RAG到LangGraph的完整学习路线

AI Agent开发看起来像是一个既要懂模型、又要懂工程、还得能部署的高门槛方向。实际跑过一遍之后,我的看法是:它更像是一条把 LangGraph、RAG、私有化部署、调优、对齐这条链路走通,再把每个环节做到可验证的学习路线。尤其是双非背景的开发者…

作者头像 李华
网站建设 2026/9/12 5:07:38

34 种语言、49 个 PO 文件:Penpot 多语言本地化工作流完整实战

34 种语言、49 个 PO 文件:Penpot 多语言本地化工作流完整实战 【免费下载链接】penpot Penpot: The open-source design platform for Product teams that need scalable collaboration. 项目地址: https://gitcode.com/GitHub_Trending/pe/penpot 设计团队…

作者头像 李华