`rg` 和 `grep` 到底是什么:给小白的实用入门

这篇文章解决 4 个问题:

  1. rg 是什么
  2. grep 是什么
  3. 它们有什么区别
  4. 你平时应该用哪个

如果你刚接触 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 是什么

rgripgrep 的命令简称。

它做的事情和 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 默认会更聪明地跳过无关内容

比如代码项目里常见这些目录:

  • .git
  • node_modules
  • dist
  • build

这些目录往往很大,而且很多时候你根本不想搜它们。

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
所以即使你以后主力用 rggrep 也最好会看、会用。


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 当成‘搜索工具’来用。

先学会:

  • 搜一个词
  • 搜一个目录
  • 看哪些文件命中了

等你以后用熟了,再去学:

  • 正则表达式
  • 更复杂的筛选规则
  • sedawkxargs 联动

不要一开始就把难度拉太高。


11. 最后总结

用最短的话总结:

  • grep:经典、通用、几乎处处可用
  • rg:更快、更适合现代代码搜索

如果你是开发者,建议平时优先用 rg
如果你写的是必须兼容很多环境的脚本,记得保留 grep 兜底。

你现在只需要先记住这 3 条:

rg "关键字"
rg "关键字" 某个目录
grep "关键字" 某个文件

够用了。

等你把这 3 条用熟,再往前学也不晚。

发表回复

Your email address will not be published. Required fields are marked *.

*
*