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

发布时间:2026/8/30 10:13:03
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.textJSON 输出的构造在 crates/printer/src/json.rs字段结构稳定写解析脚本不慌。rg 快在哪并行与跳过机制 别把速度全归因于Rust 天生快它的加速是分层的。并行遍历目录不是一个人从头翻到尾而是多个线程各领一片目录树调度实现在 crates/ignore/src/walk.rs用 work-stealing 队列让空闲线程去抢别人的活核数越多越快。跳过机制二进制文件默认根本不打开gitignore 里的目录连 stat 都省了。大型仓库 90% 的路径在这一层就被甩掉。内存映射大文件用 mmap 交给操作系统的缺页机制不用自己分块读内存占用可控。字面量快速通道像\wfoo\w这种模式会先抽出其中的foo快速定位候选行再只对这几行跑完整正则。这条优化在 crates/regex/src/matcher.rs。一句话概括先扔掉大部分文件再对剩下的文件做更快的匹配。把 rg 顺手融进日常两个今天就能做的小动作。给 shell 加个别名带上你每次都敲的参数alias rgsmrg --smart-case --line-number在编辑器设置里确认全局搜索后端用的是 rg主流编辑器多数默认就是大项目里搜索立刻快一个量级。三个真会撞上的坑颜色消失了rg 只在终端直连时自动开色输出接到管道就变纯文本。想要颜色显式加--coloralways。搜 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),仅供参考