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'
未完待续