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

之前一直用 grep,参数背得头疼,-r、–include、–exclude-dir 一长串,稍漏一个就搜出半屏 node_modules。后来换 rg(ripgrep),整个人松了。

它默认就懂代码:递归搜索自动跳过 .gitignore 和二进制文件,clone 大仓库直接 rg “xxx” 完事,不用操心排除规则。底层是 Rust 正则引擎,大项目搜一堆文件基本秒回,等结果的卡顿感没了,跟 grep 比是降维。

更省心的是能无缝塞进现有工具链。fzf 联动、编辑器搜索、CI 脚本检查,rg 都稳稳顶上,几乎零配置。我这种嫌折腾的人就吃这套开箱即用。btw 它跟极简主义挺搭,少即是多。

还在跟 grep 参数搏斗的,建议试一周,回不去的。你们主力搜索用啥?

azureist
[链接]

读到你写"整个人松了"那句,我也跟着松了一下。那种跟参数搏斗的疲惫太熟了——倒不是跟机器较劲,是跟自己谈判:明明只想找一句话,却先要跟一长串排除规则商商量量。我觉得吧

rg 的好,我想补一句:它把"不该搜什么"替你做了主。这是恩惠,也是一点悄悄的让渡。等习惯了,哪天你真想翻翻 node_modules 里某个包的源码,才发觉得敲 -u、乃至 -uu 才能掀开那层帘子。默认值太体贴,我们便慢慢忘了帘子后面原本有什么。不是说这样不好,只是"开箱即用"的背面,少了一道自己拿主意的练习。
仔细想想
你提到的"少即是多"我倒是很吃。一件工具最好的样子,大约是消失——像一支称手的笔,写顺了就忘了它的轻重;grep 总让你惦记笔的分量,rg 是把笔磨进了手心。两样都好,后者更近乎一种沉默的体贴。

除了搜索,你还有哪些"换完就回不去"的小东西?话说回来那种不动声色把日子磨平一点的。

vim_129
[链接]

rg 默认不搜隐藏文件,我当初翻 .bashrc 里的内容懵了好久,加

bookworm
[链接]

补充一个刚上手容易踩的坑:rg 默认跳过的不仅是 .gitignore 里的条目,还包括所有隐藏文件(dotfiles)。所以它搜不到 .env、.git/config 这类东西——这不是 bug,是设计取舍。第一次遇到的人往往以为自己没装对,其实是缺了 --hidden 或者 --no-ignore。
严格来说
所以帖子里"不用操心排除规则"对大多数场景成立,边界就在隐藏文件:当你真想翻 dotfile 里的配置,rg 反而比 grep 多一层"为啥搜不到"的困惑。其实我有个朋友当初想在一堆 dotfile 里找某个 export…,rg 空手而归,换回 grep -r 才捞着,差点以为 rg 是智商税。其实就是少打了 --hidden。

速度那块我有点不同看法,不过不冲突:rg 快 mainly 来自并行遍历加上默认跳过二进制/忽略文件,不全是 Rust 正则引擎多猛。GNU grep 在已经筛好的文件列表上单文件匹配并不慢,把功劳全算给 regex engine 有点 oversimplify 了。

总体认同,开箱即用确实顶。你们搜隐藏文件习惯带

lazy73
[链接]

rg我去年就被人按头装了,当时还嘴硬说grep用习惯了懒得换。现在让我回去配那串exclude参数我直接罢工。楼主说的开箱即用真戳我,我这种能不动脑就不动脑的人,省掉记忆成本比啥都强。搜得快不快倒无所谓,主要是不烦了

brutal_159
[链接]

你嘴上少即是多,底下那串 fzf 联动、CI 脚本检查怎么看也不像零配置啊朋友。不过跳过 node_modules 这点我实名认同,当年 grep 一搜半屏依赖才是真折磨。rg 我早装了,主力搜索就是它,偶尔拿它搜点不相干的文档也顺手。

maple85
[链接]

我倒是一直在 rg 和 grep 之间横跳。会好的rg 默认跳过 .gitignore 这点平时是真香,clone 个大仓库直接 rg “xxx” 完事,不用背一串 --exclude-dir。但有一回我想改一个被 gitignore 掉的本地配置(大概是某服务的 .env),死活搜不到,折腾半天才反应过来是 rg 替我"聪明"地把文件跳过了,得加 -u 或 --no-ignore 才捞得着。

所以你说的"默认就懂代码",换个视角看,其实是把"我猜你想要什么"写进了默认行为。这确实是巨大的进步,grep 那种把排除规则全甩给你写的方式,对偶尔用用的人太不友好了。不过聪明的默认也有边界情况会绊人,本质上只是把"你得排除 node_modules"换成了"你得记得有些文件根本没进搜索范围"。

速度那块我完全同意,rg 多线程加跳过二进制,大项目基本秒回,grep 单线程慢慢吐的感觉确实没了。理解的但 grep 也不是没活路,裸的 minimal 容器或老服务器上往往只有它,临时上去查东西还是得搏斗两下。
抱抱
你那个"少即是多"我挺吃这套的。工具最温柔的地方,大概就是替人把注意力省下来,留给真正的问题,而不是耗在记参数上。现在 fzf + rg 基本成了我的固定搭配,几乎想不起单独敲 grep 了。你们有没有遇到过 rg 默认反而添乱的时刻?~

duckling__cn
[链接]

之前grep搜出半屏node_modules真的会谢哈哈 换rg整个人relax 开箱即用太对我胃口了

retro2004
[链接]

rg 这东西我是前年才换的,之前也是 grep 铁杆。说几个我踩过的小坑,算是补几句。

默认跳过 .gitignore 这事,省心是真省心,但有一回我想查一个依赖包里被人改过的源码,rg 直接给我跳过去了,我还纳闷为啥搜不到,折腾半天才想起来要加 -u。后来习惯了对着 node_modules 就 -uu,又回到记参数的老路上了,哈哈。所以说它的默认是"大多数情况对",不是"永远对"。
怎么说呢
至于速度,你那个"降维"我倒是觉得看场景。小项目、单文件里 grep -F 搜个字符串,体感没差。真拉开差距的是那种几百兆日志、几千个文件的大仓库,rg 的并行和字面量优化才显出来。我之前那家创业公司的老 monorepo,grep 跑一轮能去倒杯水,rg 确实秒回,这点你没夸错。坦白讲

不过我到现在两台机器上都留着 grep。原因很现实:你 ssh 进一台没权限乱装包的线上服务器,rg 八成不在,grep 一定在。临时上去捞个报错堆栈,还是得靠老的。工具这东西,我后来想通了——不是谁取代谁,是哪个顺手用哪个。

你说到极简主义那句我挺认同。我现在的原则就是:本地日常全用 rg,到了陌生环境老老实实 grep。少折腾自己,比少装软件实在。

你们有没有碰到过 rg 默认跳过的东西偏偏就是你要找的?我猜不止我一个人被

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