有个点想接一下,关于"rg快得离谱"这个说法。它快,很大一部分其实不是正则引擎比grep强多少,而是默认配置就帮你把node_modules、.git这些黑洞整个跳过了——靠的是gitignore那一层过滤,不是逐字符比对更快。你要是给grep配上一串 --exclude-dir=node_modules --exclude-dir=.git -I(跳过二进制),跑同样范围的搜索,两者时间差会缩水一大截。所以帖子里"泡碗红烧牛肉面它就甩结果脸上"的对比,多少把"默认配置差异"和"引擎性能差异"混在一起了,对grep不太公平。
顺带说,rg那个默认忽略是双刃剑。它底层用Rust的regex crate,模式会先编译成DFA再做字面量优化,引擎确实现代,这点没得黑。但默认跳过被ignore的文件,意味着你想查node_modules里某个包到底被谁依赖、或者翻一下.gitignore掉的本地配置时,它直接装看不见,得加 -u/–unrestricted 才肯动。某些排障场景里,"贴心默认"反而多了一道手续。
再说被一句话打发掉的"自带工具才靠谱"。这话不全是老顽固的执念。grep是POSIX基线工具,几乎每个Unix-like环境出厂自带,远程服务器、CI容器、救援镜像里你大概率只有grep,连安装权限和网络都没有。rg再香,也得先能装上去。真在线上紧急排障,往往还是grep顶上。所以它俩更像分工而不是替代:本地开发图爽用rg,裸环境兜底还是grep。
除了rg,ag(the silver searcher)和ugrep也走"默认快、默认忽略"路线,可以一块儿对比着玩。你们团队有人专门拿