ripgrep 使用说明

1,386 阅读1分钟

ripgrep (rg) 是 Andrew Gallant 开发的命令行工具,可在当前目录下递归搜索文本。它默认会读取 .gitignore,忽略命中的文件,并省略隐藏文件/目录(以 . 开头的文件)和二进制文件。

ripgrep 的默认正则引擎使用自动有限机(finite automata),可以保证线性搜索时间,但不支持反向引用(backreferences)和环视断言(look-around)。如果构建 ripgrep 时使用 PCRE2,就能使用 --pcre2 标志位开启反向引用和环视断言。

安装

macOS

$ brew install ripgrep

Ubuntu 18.10+

$ sudo apt-get install ripgrep

Windows 及其他操作系统可以从 releases 页面下载二进制执行文件。

安装完毕,执行 rg --help 查看使用帮助。

用法

README.md 文件中搜索 fast 关键词:

$ rg fast README.md

README.md 中搜索以 fast 开头,后面至少一个字母的关键词。这种需求可以使用正则表达式语法:

$ rg 'fast\w+' README.md

如果省略待搜索的文件名,则默认在当前目录下递归搜索所有文件:

$ rg 'fn write\('

上面例子使用 \( ,是因为 ( 在正则表达式中属于特殊字符,转义后才能当作普通括号使用。另外,你还可以使用 rg -F 'fn write(' 实现同样功能。-F 会把模式当作字符串字面量,而不是正则表达式。

自动过滤

除递归搜索外,ripgrep 默认自动过滤一些文件。

默认忽略的文件取消默认行为的标志位特殊便捷标志位
.gitignore.ignore.rgignore 中的模式--no-ignore-u
隐藏文件和目录--hidden-uu
二进制文件-a, --text-uuu
符号链接-L, --follow-uuuu

如果要关闭智能过滤,让 rg 表现如同经典的 grep,可以使用 rg -uuu

手动过滤:globs

使用 -g 指定待搜索的文件模式。比如,在 TOML 文件中搜索 clap 字符串:

$ rg clap -g '*.toml'

注意 '*.toml' 中的单引号,防止 * 被 Shell 展开。

使用 ! 指定排除模式:

$ rg clap -g '!*.toml'

未完待续

参考资料

  1. User Guide
  2. regex - Rust