ripgrep(簡稱 rg)是一個超級快速且功能強大的命令行工具,用來在文件中進行文本搜索。它是用 Rust 編寫的,通常比其它類似的工具(比如 grep)要快,尤其是在處理大目錄或者大文件的時候。簡單來說,ripgrep 就是 grep 的升級版,它考慮了你系統(tǒng)中的 .gitignore 文件,如果某些文件、擴展名或目錄被忽略,它會自動跳過,從而提升搜索速度。
1. 安裝 ripgrep
雖然大部分 Linux 系統(tǒng)預(yù)裝了 grep,但是 ripgrep 默認并沒有安裝。不過它可以通過包管理器很方便地安裝,幾乎支持所有主流的 Linux 發(fā)行版。
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 已經(jīng)很熟悉了,那么使用 ripgrep 會很輕松。其實它的工作原理很簡單,你只需要提供一個搜索模式和文件名,ripgrep 就會幫你找到匹配的內(nèi)容并顯示出來。與 grep 類似,ripgrep 也支持在文件夾中遞歸搜索,并且會顯示文件內(nèi)容和匹配行的位置。
比如,如果你想在 Cargo.toml 文件中搜索 description,你可以這么做:
$ rg description Cargo.toml
這時 ripgrep 會返回匹配到的行,顯示文件名和行號。
3. 高級功能
上下文搜索有時候你可能想查看匹配的文本前后的上下文行,特別是在查看代碼時。你可以使用 -C(或 –context)來指定顯示匹配行前后多少行。例如,顯示匹配前后 3 行:
$ rg -C 3 “description”
如果你只關(guān)心匹配行之后的內(nèi)容,可以使用 -A,如果只關(guān)心之前的內(nèi)容,可以用 -B。例如:
$ rg -A 3 “description” # 匹配后 3 行
$ rg -B 3 “description” # 匹配前 3 行
列出匹配行的列號如果你是 vim 用戶,或者需要精確到某行某列,可以用 —column 標(biāo)志來顯示列號:
$ rg –column “description”
正則表達式搜索ripgrep 支持正則表達式,就像 grep 一樣。如果你想搜索某個模式,比如以 def 開頭的行,你可以這么做:
$ rg “^def”
多線程搜索如果你的代碼庫很大,ripgrep 還支持多線程搜索,可以提高效率。例如,指定 4 個線程進行搜索:
$ rg -j 4 “TODO”
排除某些文件如果你想排除某些文件或者目錄,可以使用 –glob 參數(shù)。比如,排除 node_modules 目錄:
$ rg “search_term” –glob ‘!node_modules/*’
忽略大小寫如果你希望搜索不區(qū)分大小寫,可以加上 -i 參數(shù):
$ rg -i “example”
搜索壓縮文件ripgrep 還可以搜索壓縮文件(如 .zip 文件),你只需要加上 -z 參數(shù):
$ rg -z “pattern” archive.zip