ripgrep(rg)

名称、版本与用途

  • 名称:ripgrep
  • 用户安装版本:15.1.0
  • 用户路径:~/.local/bin/rg
  • 当前 Codex 会话优先版本:15.2.0
  • 用途:递归搜索文件内容,默认尊重 .gitignore,适合代码库。

检查实际解析顺序:

whence -a rg
rg --version
~/.local/bin/rg --version

Codex 把自带的 rg 目录放在 PATH 最前面,因此本次会话执行 rg 得到 15.2.0。普通登录 Shell 通常会使用用户版 15.1.0。

基本语法(Synopsis)

rg [OPTIONS] PATTERN [PATH ...]
rg [OPTIONS] --files [PATH ...]

[] 表示可选项,... 表示可重复;大写名称表示需要替换的参数。

当前安装与更新

用户版由本地 install_cli_tools.sh 从官方 GitHub release 下载到 ~/.local/bin,并被 core 离线 bundle 收录。它不属于 dpkg。

安装脚本遇到已有 ~/.local/bin/rg 会跳过。升级时应下载新的官方 Linux release,在临时目录核验版本后替换用户版二进制及补全文件。

zsh 启动集成

间接相关:~/.local/bin 和 ~/.zfunc 在 .zshrc 初始化 Oh My Zsh 前加入 PATH 与 fpath。

基本功能与推荐用法

rg 'TODO|FIXME'                         # 正则搜索
rg -n -S 'httpClient' src/              # 行号、智能大小写
rg -t py 'import requests'              # 只搜索 Python
rg -g '*.toml' -g '!vendor/**' 'name'   # include / exclude glob
rg --hidden -g '!.git/**' 'token'       # 包含隐藏文件
rg -l 'deprecated'                      # 只列文件名
rg --files                              # 列出会被搜索的文件
rg 'old' -r 'new'                       # 预览替换结果,不修改文件

推荐先用默认规则搜索;只有确实需要时才使用 --hidden、--no-ignore 或二进制搜索选项。

常用搜索示例

rg -l 'TODO'                                           # 只列出包含 TODO 的文件
rg -i 'apple'                                          # 忽略大小写
rg 'function_name' ./src/                              # 在指定目录中递归搜索
rg '^engine_\d+'                                       # 匹配以 engine_加数字开头的行
rg -w 'cat'                                            # 只匹配完整单词
rg -o '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'            # 只输出匹配到的 IPv4 形式文本
rg 'panic' -B 2 -A 4                                  # 同时显示前 2 行和后 4 行
rg 'panic' -C 4                                       # 同时显示前后各 4 行
rg 'useEffect' -t js                                  # 只搜索 JavaScript 文件
rg 'config' -T html                                   # 排除 HTML 文件
rg --type-list                                        # 查看支持的文件类型及对应 glob

Note

上面的 IPv4 模式只检查“四组 1~3 位数字”的形式,不验证每组是否位于 0~255。

与 grep 的用法区别

  • rg 搜索目录时默认递归,无需像 grep 那样添加 -r 或 -R。
  • 在 rg 中,-r 是 --replace 的短选项,不是递归选项。
  • rg 默认读取 .gitignore 等 ignore 文件,并跳过 .git/、隐藏文件和目录、二进制文件,以及被 ignore 规则排除的路径。
  • grep 通常不会自动读取 .gitignore;是否跳过隐藏文件、二进制文件或忽略路径,需要通过参数或 shell 文件列表另行控制。
  • 若要扩大 rg 的搜索范围,可按需使用 --hidden(包含隐藏路径)、--no-ignore(不遵守 ignore 文件)或 -uuu(逐级取消智能过滤)。

示例中的选项、参数与子命令

本表解释本页示例实际出现的选项、参数、子命令及必要的辅助命令语法。

语法元素含义
--version显示版本。
-n, --line-number显示匹配行的行号。
-S, --smart-case模式含大写时区分大小写,否则忽略大小写。
-i, --ignore-case忽略大小写。
-w, --word-regexp只匹配完整单词。
-o, --only-matching只输出每个匹配到的部分。
-B NUM, --before-context NUM显示匹配行之前的 NUM 行。
-A NUM, --after-context NUM显示匹配行之后的 NUM 行。
-C NUM, --context NUM显示匹配行前后各 NUM 行。
-t TYPE只搜索指定文件类型。
-T TYPE排除指定文件类型。
--type-list列出支持的文件类型及其 glob。
-g GLOB只搜索匹配 glob 的路径。
-g !GLOB排除匹配 glob 的路径。
--hidden包含隐藏文件和目录。
--no-ignore不遵守 ignore 文件。
-uuu等价于 --no-ignore --hidden --binary,关闭全部自动过滤。
-l, --files-with-matches只输出包含匹配内容的文件路径。
--files列出 rg 会搜索的文件,不执行内容匹配。
-r REPLACEMENT, --replace REPLACEMENT用替换文本展示匹配结果,不修改文件。
PATTERN搜索模式;默认按正则表达式解析。
PATH ...一个或多个搜索路径;目录会被递归搜索。
whence -a NAME显示 zsh 能找到的 NAME 的全部解析位置。

官方资料