使用 ripgrep 通過正則快速查找文件內容


閱讀原文:https://einverne.github.io/post/2019/09/ripgrep-recursively-searches-directories-using-regex-pattern.html

ripgrep(簡稱 rg),是一個用 Rust 實現的命令行搜索工具,可以通過正則來搜索當前的目錄。默認情況下 ripgrep 會遵循 .gitignore 的內容,並且自動跳過隱藏的文件目錄,以及二進制文件。 ripgrep 原生支持 Windows, MacOS, Linux。ripgrep 和其他流行的搜索工具非常相似,比如 The Silver Searcherack 和 grep。

rg 的優勢

目前 Linux 下可用的搜索工具非常多,GNU 中的 grep, ack-grepThe Silver Searcher 等等,而 rg 的優勢在於快。

  • ripgrep 是真正的快,我在一個有 26G 代碼的目錄中查找一個方法也可以在幾乎秒級的速度找到,所以我經常用來搜索不確定調用關系,但代碼又分布在不同項目中時使用。
  • ripgrep 遵循 .gitignore,在默認情況下會跳過二進制文件,隱藏的文件目錄,不會追蹤軟鏈接,更進一步加快了速度。
  • ripgrep 支持 Unicode,可以搜索壓縮文件,還可以自己選擇正則表達式匹配引擎,比如 PCRE2

Installation

安裝的內容直接參考官方頁面 即可。

brew install ripgrep

Usage

來看看 rg 的通用格式

USAGE: rg [OPTIONS] PATTERN [PATH ...] rg [OPTIONS] [-e PATTERN ...] [PATH ...] rg [OPTIONS] [-f PATTERNFILE ...] [PATH ...] rg [OPTIONS] --files [PATH ...] rg [OPTIONS] --type-list command | rg [OPTIONS] PATTERN

最不用記憶的就是直接:

rg "keyword"

會顯示當前目錄下的搜索內容,會打印出文件名及關鍵字出現的行數。

和 grep 命令類似,也有三個打印出上下行的選項

  • -A NUM 打印匹配行后面 after N 行
  • -B NUM 打印匹配行前面 before N 行
  • -C NUM 打印匹配行前后 N 行

用正則表達式搜索

使用 -e REGEX 來指定正則表達式

rg -e "*sql" -C2

搜索所有內容包括 gitignore 和隱藏文件

默認 rg 會忽略 .gitignore 和隱藏文件,可以使用 -uu 來查詢所有內容:

rg -uu "word" .

顯示匹配的次數

使用 -c 來顯示匹配的次數:

rg -c "word" .

結果會在文件名后面增加一個次數。

搜索指定的文件類型

可以使用 -t type 來指定文件類型:

rg -t markdown "mysql" .

查看支持的文件類型:

rg --type-list

看到這里,有些讀者可能要問假如我要在兩個文件類型中查找呢,這個時候 -t 參數就無法滿足了,需要引入新的 -g 參數,man rg 看一下 -g 就知道該選項后面跟着一個 GLOB,正則表達式,包括或者去除一些文件或者目錄。比如要在 md 文件或者 html 文件中查找 “mysql” 關鍵字:

rg -g "*.{md,html}" "mysql"

注意這里是花括號。

只打印包含匹配內容的文件名

使用 -l 來打印文件名

rg -l -w "word" .

相反的是如果要打印沒有匹配內容的文件名

rg --files-without-match -w "word" .

啟用大小寫敏感

使用 -s 選項來啟用大小寫敏感

rg -s "word" .

使用 -i 來關閉大小寫敏感。

顯示不包含關鍵字的行

使用選項 -v 來顯示不包含關鍵字的行

rg -v "word" .

搜索單詞

添加 -w 參數僅顯示該單詞的內容,該選項等同於在搜索 Pattern 前后加上 \b,這樣可以避免因為模糊搜索而導致的不精確。

rg -w "myword" .

比如搜索 abc,可能有些單詞包含 dabce ,那么也會被搜索出來,而加上 -w 就不會搜索出來了。

reference

有兩個方法查看 rg 使用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM