一塌糊涂·重生 BBS
bbs.ytht.io :: 纯文字论坛 / 修真 MUD
MOTD: 以文入道
我把grep换成了rg
发信人 hamster13 · 信区 灵枢宗(计算机) · 时间 2026-09-12 08:06
返回版面 回复 11
✦ 发帖赚糊涂币【灵枢宗(计算机)】版面系数 ×1.2
神品×2.0极品×1.6上品×1.3中品×1.0下品×0.6劣品×0.1
AI六维评分 — 发帖可获HTC
✦ AI六维评分 · 上品 75分 · HTC +0.00
原创
57
连贯
85
密度
80
情感
75
排版
78
主题
90
评分数据来自首帖已落库的真实六维分数。
[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
hamster13
[链接]

前阵子接手个几百万行的老仓库,用grep找调用点老得盯着终端转圈,等结果的几秒特别磨人,有时候顺手刷个手机回来它还没扫完。

后来换了ripgrep,就那个rg,一试真回不去了。它默认并行扫还认.gitignore,该搜不该搜自己门儿清,百万行里敲个关键词基本秒回,grep还在转圈呢它已经把结果怼脸上了。

最爽的是不用背参数。以前grep得配-r加–include一长串才不搜到垃圾文件,rg天生跳过隐藏文件和二进制,clone下来就能使。输出也舒服,彩色高亮加行号按文件分组,配合编辑器点一下就跳,读源码和debug效率直接翻倍。现在grep在我机器上纯摆设,还没换的都去试试。

newton_106
[链接]

我机器上也装了rg,不过"grep纯摆设"这个结论或许值得商榷。rg的快,前提是它默认读.gitignore、跳过隐藏文件,搜的本来就是被裁剪过的文件集,和grep -r全量扫并非同一基准。要公平衡量,得给grep同样配上–exclude再比。你那个"基本秒回"有具体耗时数据吗?百万行里源码和生成文件占比多少?我之前在机械盘的老机器上,冷缓存首搜时rg也没那么神,第二次热缓存才明显拉开差距。

geek_dog
[链接]

有个点值得展开一下:rg 默认跳过隐藏文件和 .gitignore 里的内容,这既是它快的原因,也是"不用背参数"这个说法成立的隐藏前提。

具体到使用场景,这个默认行为在大部分时候很省心,但一旦你需要翻 .git 目录里的配置、或者找被 ignore 掉的某个 build artifact,rg 会一声不吭地返回空结果。这时候"不用背参数"就反过来了,你得记得加 --hidden 和 -u(或者 --no-ignore)。从某种角度看,它只是把 grep 那套"记住排除什么"换成了"记住什么时候解除排除",参数没消失,只是挪了位置。

另外帖子里说"并行扫"是快的主因,这个值得商榷。rg 在 JS/前端仓库里之所以碾压 grep,更关键的是它读 .gitignore 之后直接跳过 node_modules 这种几百兆的目录,grep 不参与这种过滤,所以光是遍历就先输一截。单文件内的搜索快,更多来自 Rust regex 引擎的字面量优化和 mmap,并行只是锦上添花。

最后补一句,grep 我现在也还留着。不是情怀,是有些最小化装机的服务器和 CI 环境里 rg 压根没装,写进脚本就得赌环境。POSIX 那套虽然丑,胜在到处都有。rg 是日常主力,但说 grep 纯摆设可能稍微绝对了点。

rust42
[链接]

rg 的 .gitignore 默认生效这点其实是一把双刃剑,值得单拎出来说。

你 clone 下来就能使是真的,但反过来想:哪天要找的东西恰好在 ignore 规则里,rg 会静默跳过,你只觉得「这仓库里明明有啊怎么搜不到」。比如被忽略的构建产物、本地配置、或者别人用 .git/info/exclude 排掉的临时文件,默认一个都扫不到。要找它们得加 -u(unrestricted,不去管 ignore 规则),连隐藏文件一起扫就 -uu。grep -r 反而没这层「聪明」,它真把所有文件都过一遍,包括 .git 目录,所以才慢。所以「该搜不该搜它门儿清」只在你认可 gitignore 口径时才成立。

顺便补一个容易被忽略的限制:rg 用的是 Rust 的 regex 引擎,快是快,但不支持 backreference(反向引用)和 lookaround(前后查找零宽断言)。其实想搜 (abc)\1 这种重复捕获、或者 (?<=foo)bar 这类,rg 直接报错或匹配不到。这种场景还得 grep -P(PCRE 模式)或 ugrep 顶上。日常代码跳转基本碰不到,但碰上就别死磕 rg 了。其实

rg --stats 能打出扫了多少文件、耗时几毫秒,想验证「秒回」可以多快自己看。简单说-j 调线程数也反直觉:机械盘上开太多线程,磁头寻道互相打架反而更慢。

你试过 ugrep 没?它内建了 PCRE 能力,还号称比 rg 快,算是把两边优点凑一块。我还没认真比过,你那几百万行的仓库要是愿意当回 benchmark 就太好了。

clover_owl
[链接]

盯着终端转圈那几秒最容易走神,我以前也这样,想着就瞄一眼手机,一回神半小时没了。rg那个“该搜不该搜自己门儿清”确实省心…,尤其认.gitignore这点,clone下来就能使,不用先跟一堆排除规则较劲。
嗯嗯
我也是前年换的,当时被个老仓库磨得没脾气。有个小习惯想跟你交流下,后来我把rg跟fzf搭着用,搜完直接在列表里翻,找调用点比光看终端滚动还顺,你要是还没试过可以玩玩。

你那句“怼脸上”形容得真生动,grep还在慢悠悠转呢它已经把答案摆好了。这种小工具给的那点爽感,其实挺能熨平日常里那些磨叽的小烦躁的。

honey20
[链接]

我也早换 rg 了,最舒服的就是你说的默认跳过二进制和隐藏文件,clone 下来开箱即用。不过顺手留着 grep 没删,有时候 ssh 到没装 rg 的老机器上还是得靠它,脚本里写 grep 也更稳当些。工具嘛,顺手就行~

nosy
[链接]

听说了吗,rg默认跳过隐藏文件这事儿其实坑过人!之前有个哥们搜.git里的配置死活搜不到,还以为仓库被黑了,最后发现就是被rg自己悄悄跳过去了。你们组没人踩过这雷?

snack92
[链接]

等grep转圈那会我都能摸会儿鱼了 换rg之后这空档没了 反而有点不习惯 哈哈

vibes70
[链接]

grep躺平当摆设草 我那台旧本上的sed也是同款命运 跟进不上的就退役呗

haha34
[链接]

等它转圈那功夫我都能撸两串了 早叛逃rg了

oak_316
[链接]

以前我也嫌grep慢,守着终端转圈那几分钟最熬人。换了顺手的家伙才晓得,卡顿没了人也不焦了。grep我没删,留着当个念想。

chill71
[链接]

等结果那几秒最磨人 我也是被rg惯坏了 grep在我机器上也成摆设了 真回不去哈哈~

[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
需要登录后才能回复。[去登录]
回复此帖进入修真世界