ripgrep(简称 rg)是一个超级快速且功能强大的命令行工具,用来在文件中进行文本搜索。它是用 Rust 编写的,通常比其它类似的工具(比如 grep)要快,尤其是在处理大目录或者大文件的时候。简单来说,ripgrep 就是 grep 的升级版,它考虑了你系统中的 .gitignore 文件,如果某些文件、扩展名或目录被忽略,它会自动跳过,从而提升搜索速度。
1. 安装 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
2. 如何使用 ripgrep
如果你对 grep 已经很熟悉了,那么使用 ripgrep 会很轻松。其实它的工作原理很简单,你只需要提供一个搜索模式和文件名,ripgrep 就会帮你找到匹配的内容并显示出来。与 grep 类似,ripgrep 也支持在文件夹中递归搜索,并且会显示文件内容和匹配行的位置。
比如,如果你想在 Cargo.toml 文件中搜索 description,你可以这么做:
$ rg description Cargo.toml
这时 ripgrep 会返回匹配到的行,显示文件名和行号。
3. 高级功能
上下文搜索有时候你可能想查看匹配的文本前后的上下文行,特别是在查看代码时。你可以使用 -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