Linux grep / rg / glob 命令是做什么用的?
· 6 min read
grep 搜文件内容、rg 是 grep 的现代升级、glob 匹配文件名——三者名字长得像,但 各管一摊。
- grep:POSIX 自带文本搜索,
-r/-n/-i/-E是高频选项 - rg (ripgrep):Rust 写的现代版,默认跳过 .gitignore 和二进制
- glob:shell 通配符(
*/?/[...]),没加引号会被 shell 展开 - globstar:
shopt -s globstar后,**才递归匹配任意层级 - find -name:find 自己的类 glob 语法,不走 shell 展开
- 别乱混:
grep *.js被 shell 拆成多文件,只搜当前目录
三个工具各管什么
| 工具 | 搜的对象 | 是不是命令 | 默认行为 |
|---|---|---|---|
| grep | 文件内容 | 是(POSIX 自带) | 只搜当前文件,要 -r 才递归 |
| rg | 文件内容 | 是(要装) | 自动递归,跳过 .gitignore 和二进制 |
| glob | 文件名 | 不是,是 shell 功能 | 命令运行前由 shell 自动展开 |
glob 不是命令,是 bash/zsh 自带的 通配符匹配规则——你按下回车之前,shell 就把 * ? 这些先展开成实际的文件名,再喂给命令。所以 grep "TODO" *.js 里的 *.js 不是 grep 处理的,是 shell 处理的。