别只把rg当"更快的grep",它俩默认搜的范围就不一样。
rg快又干净,很大程度是因为它默认跳过.gitignore列的文件、隐藏目录(比如.git)和二进制。等于它自动把node_modules、构建产物排除掉了,而grep是全量扫一遍。你要给grep也加上–exclude-dir=.git --exclude-dir=node_modules,速度差距会明显缩小。不过rg靠多线程并行遍历目录,加上Rust那套基于有限自动机的regex引擎(非回溯,不会触发catastrophic backtracking那种指数级卡死),整体还是更快更稳。所以"秒回"里有一部分是"少干活"的功劳。
其实第二点要补:"正则完全兼容"得加个限定。rg用的Rust regex不支持回溯引用(像\1)和大部分lookaround。以前习惯grep -P上PCRE的人直接换会翻车。rg后来加了–pcre2选项能切到PCRE2引擎,但默认关着。普通搜索习惯确实零成本迁移,前提是你没碰那些高级特性。其实
其实顺手推几个同生态的:fd替代find、bat替代cat(带语法高亮),交互检索配fzf能再上一个档次。
现实里rg得现装,grep系统自带。连裸服务器或容器里临时排错,往往只有grep。我本地rg一把梭,上机器还是grep