Ripgrep 是一個面向行的搜索工具,它結合了 Silver 搜索器的實用性和 GNU grep 的速度。 它的工作原理是遞歸搜索當前目錄路徑以查找正則表達式模式,默認情況下忽略隱藏文件和二進製文件。 它目前在 Windows、Mac OS 和 Linux 上受支持,每次更新後都可以下載二進製文件 發布.
為什麼使用 ripgrep ?
它比 grep、awk 和 sed 快。 默認忽略二進製文件和隱藏文件。 與 grep 類似,它可以搜索特定類型的文件或明確忽略其他文件。 它本身支持 UTF 和 Unicode 支持以外的文本編碼。 Ripgrep 的速度來自 Rust 的正則表達式引擎,它使用有限自動機、SIMD 和其他積極的文字優化來構建,以解釋其快速搜索。 它還支持使用中間緩衝區搜索內存映射,使其適用於單個文件和大目錄。
如何安裝 Ripgrep
二進制名稱 ripgrep 是 rg. Linux 二進製文件是靜態可執行文件,而 Windows 二進製文件是使用 MinGW (GNU) 或 Microsoft Visual C++ (MSVC) 構建的。
在 Mac OS X 自製軟件 您可以從 homebrew-core 安裝它,如下所示:
$ brew install ripgrep
或者您可以使用自定義點擊安裝每晚使用 rust 編譯的二進製文件(包括 SIMD 和所有優化):
$ brew tap burntsushi/ripgrep https://github.com/BurntSushi/ripgrep.git
$ brew install burntsushi/ripgrep/ripgrep-bin
如果您是 Windows Chocolatey 用戶,那麼您可以安裝 來自 官方回購.
$ choco install ripgrep
如果你是一個 拱形Linux 用戶,然後您可以從官方存儲庫安裝。
$ pacman -S ripgrep
如果你是一個 Gentoo 用戶,您可以從安裝 官方回購.
$ emerge ripgrep
如果你是一個 Fedora 24+ 用戶,您可以從 警察.
$ dnf copr enable carlgeorge/ripgrep
$ dnf install ripgrep
如果你是一個 RHEL/CentOS 7 用戶,您可以從 警察.
$ yum-config-manager --add-repo=https://copr.fedorainfracloud.org/coprs/carlgeorge/ripgrep/repo/epel-7/carlgeorge-ripgrep-epel-7.repo
$ yum install ripgrep
如果你是一個 尼克斯 用戶,您可以從 尼克包.
$ nix-env --install ripgrep #Or using the attribute name, which is also `ripgrep`
如果你是一個 Rust 程序,它可以與貨物一起安裝。 請注意,這需要您擁有 Rust 1.12 或更新版本 安裝。
$ cargo install ripgrep
ripgrep 當前不在任何其他軟件包存儲庫中。 我想改變這一點。
幾個例子
您可以使用命令“rg ‘name’”遞歸搜索任何關鍵字,如下所示:
$ rg plugins
這 example 跳過搜索路徑中的所有隱藏文件和二進製文件。 可以使用“-u 標誌”或“-uu 標誌”明確說明,如下所示。
$ rg -uu plugins # similar to `grep -r`
$ rg -uuu plugins # similar to `grep -a -r`
搜索和替換
從給定文件中搜索模式,每行一個模式。 當此標誌被多次使用或與“-e/–regexp”標誌結合使用時,將搜索提供的所有模式。 空模式行將匹配所有輸入行,並且換行符不計為模式的一部分。 -r, –replace
1) 查找名字和姓氏並使用正則表達式模式交換它們,將它們分配給兩個變量並應用 –replace 標誌
$ rg '([A-Z][a-z]+)s+([A-Z][a-z]+)' --replace '$2, $1' #'([A..Z]..)' -> regexp flag
使用 –files 標誌在文件中搜索模式,該標誌打印將在不執行搜索的情況下搜索的每個文件。 l –files-with-matches 標誌顯示至少有一個匹配的路徑。 同樣對於顯示沒有匹配的文件(–files-without-match); 打印每個將被搜索而不實際執行搜索的文件。 這對於確定是否正在搜索特定文件很有用。
2) 通過符號鏈接在文檔目錄中搜索包含插件的文件
$ rg -LF 'plugins' /home/localhost/Documents/ # -L flag for following symbolic links
使用 -g 或 –glob 標誌包含或排除與給定 glob 匹配的用於搜索的文件/目錄。 這總是會覆蓋任何其他忽略邏輯。 可以使用多個 glob 標誌。 通配規則匹配 .gitignore 通配符。 在 glob 前面加上 ! 排除它。
$ rg plug -g 'README.*'
$ rg plug -g '!*.min.js' #excludes glob
結論
Ripgrep 目前擊敗了 Linux 系統上的任何其他搜索工具,因為在搜索單個和巨大的文件目錄時,它在性能和正確性方面都更好。 此外,ripgrep 提供 Unicode 支持並且比當前可用的工具(例如 grep、awk、sed、find)工作得更好,並且對於任何 Linux 用戶來說都是一個額外的優勢。