ripgrep(简称rg)是一个超级快速且功能强大的命令行工具,用来在文件中进行文本搜索。它是用 Rust编写的,通常比其它类似的工具(比如grep)要快,尤其是在处理大目录或者大文件的时候。简单来说,ripgrep就是grep的升级版,它考虑了你系统中的 .gitignore 文件,如果某些文件、扩展名或目录被忽略,它会自动跳过,从而提升搜索速度。
- 安装ripgrep
虽然大部分Linux系统预装了grep,但是ripgrep默认并没有安装。不过它可以通过包管理器很方便地安装,几乎支持所有主流的Linux发行版。
Debian/Ubuntu系列:
sudo apt update
sudo apt install ripgrep
CentOS/RHEL系列:
sudo yum install epel-release
sudo yum install ripgrep
Fedora:
sudo dnf install ripgrep
Arch Linux:
pacman -S ripgrep
Gentoo:
emerge sys-apps/ripgrep
openSUSE(15.1及以上版本):
sudo zypper install ripgrep
Debian Buster或更高版本,Ubuntu 18.10及以上版本:
sudo apt install ripgrep
- 如何使用ripgrep
如果你对grep已经很熟悉了,那么使用ripgrep会很轻松。其实它的工作原理很简单,你只需要提供一个搜索模式和文件名,ripgrep就会帮你找到匹配的内容并显示出来。与grep类似,ripgrep也支持在文件夹中递归搜索,并且会显示文件内容和匹配行的位置。
比如,如果你想在Cargo.toml文件中搜索description,你可以这么做:
$ rg description Cargo.toml
这时ripgrep会返回匹配到的行,显示文件名和行号。
- 高级功能
上下文搜索有时候你可能想查看匹配的文本前后的上下文行,特别是在查看代码时。你可以使用 -C(或 –context)来指定显示匹配行前后多少行。例如,显示匹配前后 3 行:
$ rg -C 3 “description”
如果你只关心匹配行之后的内容,可以使用-A,如果只关心之前的内容,可以用-B。例如:
$ rg -A 3 “description” # 匹配后 3 行
$ rg -B 3 “description” # 匹配前 3 行
列出匹配行的列号如果你是vim用户,或者需要精确到某行某列,可以用–column标志来显示列号:
$ rg –column “description”
正则表达式搜索ripgrep 支持正则表达式,就像grep 一样。如果你想搜索某个模式,比如以def开头的行,你可以这么做:
$ rg “^def”
多线程搜索如果你的代码库很大,ripgrep还支持多线程搜索,可以提高效率。例如,指定4个线程进行搜索:
$ rg -j 4 “TODO”
排除某些文件如果你想排除某些文件或者目录,可以使用–glob参数。比如,排除node_modules目录:
$ rg “search_term” –glob ‘!node_modules/*’
忽略大小写如果你希望搜索不区分大小写,可以加上 -i 参数:
$ rg -i “example”
搜索压缩文件ripgrep 还可以搜索压缩文件(如 .zip 文件),你只需要加上 -z 参数:
$ rg -z “pattern” archive.zip