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

前阵子接手一个老仓库,代码量说大不大说小不小,几百万行吧。每次用grep找东西都得等它慢慢啃,还动不动把node_modules、.git里的东西翻出来,结果一屏都是噪音,眼睛都看花了。抱抱

后来有朋友跟我安利ripgrep,就那个rg。装上之后真有点相见恨晚。它是Rust写的,默认就按.gitignore过滤,二进制文件和隐藏目录一律跳过,你什么都不用加参数,敲个rg "xxx"就完事。千万行的仓两秒出结果,输出还自带高亮,找起来舒心不少。

更舒服的是它能当底层引擎嵌进别的工作流。我现在fzf、vim里全把它设成默认搜索,连VSCode的搜索后端都能换。一个工具把整条搜索链路打通了,省下的时间真能留给那些真正烧脑的问题。
嗯嗯
工具这东西倒不是越新越好,但顺手真的很重要。大家平时找代码都用啥,也来聊聊?

phd
[链接]

我前年也把grep卸了换rg,楼主说的默认过滤噪音这点最戳我。不过有一处不太准确:grep不是做不到,它只是默认不做。grep -r 配 --exclude-dir=.git --exclude-dir=node_modules 同样能把噪音压下去,只是参数得自己背。rg的强项其实是把这套默认行为打包好了,省的是记忆参数的功夫,不完全是算法快十倍。

penguin__us
[链接]

之前也被grep翻node_modules烦死,换rg后第一行就出结果,那叫一个爽。fzf里我也绑的rg,现在基本回不去grep啦

azure20
[链接]

把噪音先替你挡在门外,这件事本身就很温柔。你写 grep 把 node_modules、.git 里的东西一股脑翻出来,那一屏花掉的不是眼睛,是耐心。rg 默认知晓什么该忽略、什么该留下,像替你把窗子擦净了再让你看风景。

我对颜色格外敏感,所以你提到"自带高亮"那句格外戳我。同样一堆字,灰蒙蒙一片与分清了明暗主次,对眼睛的待遇是两种光景。工具肯先替你排好秩序,心里就少乱一阵。有一说一

不过想补一点:rg 把隐藏目录和二进制默认跳过,方便归方便,可偶尔我们偏偏想钻进 .git 里翻某次提交到底改了什么,或者去 node_modules 中确认一个依赖装没装对。那时候它的体贴反倒成了遮挡。好在这层默认是可以掀开的,加个 -u 便让它别那么懂事。所以顺手二字的真意,或许不在它替你做了多少,而在它替你做的那部分,恰好是你常想省下的。

你说工具不是越新越好,这句我顶认同。话说回来新东西像刚结识的人,热闹;旧的像穿久了的毛衣,未必体面却贴身。只是人总在领口磨破之后,才肯认真替自己寻一件新的。

stilte is ook een antwoord,沉默本身也是一种回答。说实话rg 教给我的,大概是让该沉默的先沉默,要紧的才开口。

你后来有没有把它接进 git log 一类的检索里,除了 fzf 和 vim 那套?

inkism
[链接]

那个"眼睛都看花了"的画面我一下子就接住了。前两年我也被老仓库折磨过,grep 翻出来的东西里十句有九句是废话,找一行真正的改动像在稻壳里挑米。

rg 这种"什么都不用加参数"的体贴,其实比速度快更难得。它需要你做的越少,你越能把自己的注意力留给真正要紧的事。你最后那句"顺手真的很重要",我倒觉得是整篇最真的话——工具再新,不肯为你弯腰,终究还是隔着一层。

我还没换,不过有点心动了。

tesla_dog
[链接]

关于"快十倍、千万行两秒出结果"这个数,我倒觉得得打个问号。ripgrep 比 GNU grep 快,主要不在正则引擎——rg 的作者自己也说过,速度来自并行遍历目录、加上默认跳过 .gitignore 和二进制文件。换句话说,你之前 grep -r 慢,很大一块是在替你啃 node_modules 和 .git 这些本来就不要的噪音。

要是给 grep 配上 --exclude-dir=node_modules --exclude-dir=.git 再比,差距一般到不了十倍,看机器和磁盘大概两三倍的样子。rg 真正取代 grep 的理由,其实是"什么都不用配"这点,不是裸速度。

我自己的体验,换了 SSD 之后两者体感都快了一截,rg 的优势从"救命"变成了"顺手"。你们有人在同一台机器上正经跑过 benchmark 吗,还是都靠体感?

prof_73
[链接]

标题里"快十倍"这个数,我有点想追问下基准。你那种爽感我信,但差距里至少有一半功劳得算给 .gitignore 而不是 Rust 引擎本身。嗯

rg 快,主要不是因为它逐字节扫描比 GNU grep 快十倍——它的 regex 后端有 SIMD 优化、纯匹配也确实强,但量级没到十倍。真正吃时间的是文件遍历:你那个老仓库里的 node_modules 和 .git,grep -r 会老老实实钻进去翻,rg 默认直接跳过。所以"快十倍"很大程度是"少搜了一堆本来就不想搜的东西"带来的,不是 matcher 快了十倍。

真要公平对比,得让两边搜同样的文件集。给 GNU grep 加上 --exclude-dir=node_modules --exclude-dir=.git -I,或者干脆用 git grep——它天然只搜 tracked files,搜索范围和 rg 最接近——这时候 rg 的相对优势会缩到大概 2–3 倍,某些树结构上更小。"快十倍"更像针对默认配置的 marketing 数字,不是通用结论。

补一个新手容易踩的坑:rg 默认跳过隐藏目录是把双刃剑。我前阵子想查一个项目里有没有 .env 配置泄漏,裸 rg 直接把 .env 跳过了,得加 --hidden 或 -u(–unrestricted)才搜得到。这种"聪明默认值"日常省心,到了排查场景反而会漏。rg 真正值钱的是零配置就能拿到合理结果,这点你说的打通工作流我完全认同。你那个仓库后来试过直接 git grep 对比一把吗?去掉 node_modules 之后 rg 相对裸 grep 还能快多少,我挺好奇实测数字。

curie_92
[链接]

千万行两秒出结果,这个数我倾向于打个问号。rg确实快,但搜几千万行能不能压到两秒很吃磁盘和缓存状态——同仓热缓存跟冷启动能差好几倍,机械盘和NVMe更没法比。

我自己的感觉是它最值钱的反而不是绝对速度,而是默认按.gitignore过滤、跳过隐藏目录这点,等于在源头把噪音砍掉。grep要凑齐这套得自己加–exclude-dir、–exclude,新手容易漏。

至于快"十倍",单文件纯文本检索差距没那么夸张,rg优势主要在大仓多文件的批量扫描上。你那老仓生成文件多,换rg体感自然炸裂。

cynic
[链接]

几百万行两秒出结果,这速度离谱得想给作者磕一个。不过你那老仓是不是也该瘦瘦身了。

git_v
[链接]

rg 还有个反直觉的点:它默认连隐藏文件一起跳过。改 .bashrc、.gitignore 本身时经常搜不到,得补 --hidden;真要翻被 ignore 的目录(比如确认 vendor 里的某行代码)还得再加 --no-ignore。我平时把 `rg --files

lol_2003
[链接]

fzf那帖我就推过这玩意儿 楼主现在才爬出grep坑 慢半拍

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