`rg` 和 `grep` 到底是什么:给小白的实用入门
这篇文章解决 4 个问题:
rg是什么grep是什么- 它们有什么区别
- 你平时应该用哪个
如果你刚接触 Linux 和终端,只看完这篇就够了。
1. 先说结论
一句话:
grep是经典老工具rg是更适合现代开发者的新工具
如果你平时主要是在代码项目里找内容,通常优先用 rg。
如果你在写兼容性很强的脚本,或者在任何机器上都要保证能跑,grep 更通用。
最简单的理解方式是:
rg 可以看成“更现代、更省事的 grep”。
2. grep 是什么
grep 是 Linux 里最常见的文本搜索命令之一。
它最常见的用途是:
在文件里查找某一段文字。
比如:
grep "hello" test.txt
意思是:
在 test.txt 里找包含 hello 的行。
如果文件内容是:
hello world
abc
say hello
那输出通常会是:
hello world
say hello
所以,grep 的核心任务很简单:
按条件筛选文本行。
3. rg 是什么
rg 是 ripgrep 的命令简称。
它做的事情和 grep 很像,也是搜文本。
但它更偏向“搜项目、搜代码库”。
例如:
rg "model_reasoning_effort" ~/.codex
意思是:
在 ~/.codex 目录下递归查找所有包含 model_reasoning_effort 的内容。
它特别适合这种场景:
- 在项目里找一个函数名
- 在很多文件里找某个配置项
- 快速判断某个字符串出现在哪些文件里
所以可以把 rg 理解成:
更适合程序员日常开发的搜索工具。
4. 它们最大的区别是什么
很多小白第一次看这两个命令,会觉得它们差不多。
确实差不多,但默认行为差很多。
grep 的特点
- 几乎所有 Linux 都有
- 历史很久,兼容性非常强
- 很多教程、脚本、运维命令都在用
rg 的特点
- 搜代码通常更快
- 默认递归搜索目录
- 默认更适合项目开发
- 输出更清晰,开发体验更好
对初学者来说,最有体感的区别通常是这两个:
区别 1:rg 默认就会递归搜目录
比如你想在整个项目里找 worker。
用 grep,你常常要写:
grep -R "worker" .
用 rg,通常只要:
rg "worker"
rg 更省事。
区别 2:rg 默认会更聪明地跳过无关内容
比如代码项目里常见这些目录:
.gitnode_modulesdistbuild
这些目录往往很大,而且很多时候你根本不想搜它们。
rg 默认通常会更聪明地避开很多无用结果。
这也是为什么它特别适合搜代码库。
5. 为什么很多程序员更喜欢 rg
因为它更符合真实开发场景。
你平时不是只搜一个文件,而是会做这些事:
- 找某个函数定义在哪
- 找某个配置字段在哪些文件出现过
- 找某个报错字符串是谁打印的
- 找某个接口路径在前后端哪里都用了
这时候,rg 的体验会明显更顺手。
比如:
rg "model = \"gpt-5.4\"" ~/.codex
rg "worker" ~/.codex/agents
rg --files ~/.codex | rg "toml$"
这几条都很适合开发者日常排查和探索。
6. 那是不是可以完全不用 grep
也不是。
grep 仍然很重要,原因有两个:
原因 1:通用性非常强
很多机器默认就有 grep,但未必装了 rg。
所以如果你写的是“到处都要跑”的脚本,grep 更稳。
原因 2:很多老教程和老脚本都在用它
你学 Linux、看服务器教程、看运维文章时,经常会碰到 grep。
所以即使你以后主力用 rg,grep 也最好会看、会用。
7. 新手应该怎么选
最实用的建议是:
日常开发时
优先用 rg
原因:
- 快
- 省事
- 搜项目体验更好
写兼容性强的脚本时
优先考虑 grep
原因:
- 系统自带
- 更不容易因为环境差异报错
所以不是谁完全替代谁,而是:
- 开发找代码,用
rg - 通用脚本兜底,用
grep
8. 你最该先学会的几个例子
下面这些例子足够你开始用了。
例子 1:在当前目录搜索字符串
rg "worker"
意思是:
在当前目录及其子目录里,找包含 worker 的内容。
例子 2:在指定目录里搜配置项
rg "model_reasoning_effort" ~/.codex
意思是:
在 ~/.codex 目录下查找这个字段出现的位置。
例子 3:只列出文件名,不显示匹配行
rg -l "worker" ~/.codex
意思是:
只告诉你哪些文件包含 worker,不展开具体行内容。
例子 4:配合文件列表使用
rg --files ~/.codex
意思是:
列出 ~/.codex 下的文件。
再配合一次筛选:
rg --files ~/.codex | rg "toml$"
意思是:
只看 .toml 文件。
例子 5:用 grep 搜单个文件
grep "hello" test.txt
意思是:
在 test.txt 里搜 hello。
这是最基础、最经典的用法。
9. 你电脑里为什么之前会报 rg 找不到
这个问题很典型,很多新手都会遇到。
“找不到命令”并不一定说明没安装。
有时候只是因为:
- 命令不在
PATH里 - 装在某个软件自己的目录里
- 当前 shell 没读到正确环境变量
后来你已经装了系统版 ripgrep,所以现在:
which rg
应该会看到:
/usr/bin/rg
这就说明 rg 已经是标准系统命令了。
10. 小白最容易混淆的一点
很多人会问:
“我到底是在学 rg,还是在学正则表达式,还是在学 shell?”
答案是:
这三者有关,但不是一回事。
你现在最先要掌握的是这一层:
把 rg 当成‘搜索工具’来用。
先学会:
- 搜一个词
- 搜一个目录
- 看哪些文件命中了
等你以后用熟了,再去学:
- 正则表达式
- 更复杂的筛选规则
- 和
sed、awk、xargs联动
不要一开始就把难度拉太高。
11. 最后总结
用最短的话总结:
grep:经典、通用、几乎处处可用rg:更快、更适合现代代码搜索
如果你是开发者,建议平时优先用 rg。
如果你写的是必须兼容很多环境的脚本,记得保留 grep 兜底。
你现在只需要先记住这 3 条:
rg "关键字"
rg "关键字" 某个目录
grep "关键字" 某个文件
够用了。
等你把这 3 条用熟,再往前学也不晚。