0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是ripgrep?怎樣去使用ripgrep命令呢?

冬至子 ? 來源:TIAP ? 作者:劉光錄 ? 2022-11-15 18:09 ? 次閱讀

ripgrep 是開源社區(qū)正在進(jìn)行的 RIIR(re-write in Rust)工作的一個優(yōu)秀成果。它旨在成為經(jīng)典grep 命令

它的語法如下:

rg  [files/directories]

使用 ripgrep,可以不提供待搜索的文件名。 如果沒有提供文件名,那么就會搜索所有的文件 。如果你不知道搜索的關(guān)鍵詞在哪個文件中,那這種情況下是非常有用的。

當(dāng)然,我們也可以使用 grep 搜索所有的文件,但是 ripgrep 不需要提供額外的參數(shù)。

什么是 ripgrep

ripgrep 是一個遞歸正則表達(dá)式模式匹配工具,它考慮了 gitignore。如果你的 gitignore 中有排除的文件或目錄,那么 ripgrep 將會忽略它們,從而加快搜索的執(zhí)行時間。

ripgrep 幾個比較突出的特點如下:

  • 在目錄中遞歸搜索;
  • 輸出中不同顏色高亮顯示;
  • 支持多種編碼格式,比如 UTF-8,SHIFT_JIS等;
  • 可以在壓縮文件的zip文件中搜索;
  • 默認(rèn)情況下會忽略隱藏文件,另外也會忽略 gitignore文件中的過濾設(shè)置。

你可以將其視同為 grep,但 ripgrep 搜索的是文件和文件內(nèi)容,而不是 grep 所處理的原始字節(jié)流。

安裝 ripgrep

大多數(shù) Linux 系統(tǒng)中都預(yù)裝了 grep,但是 ripgrep 并沒有這樣的特權(quán),所有我們需要手動安裝它。

ripgrep 在所有主流 Linux 發(fā)行版的存儲庫中都可用,所以我們可以使用包管理器來安裝。

如果你是 Arch Linux 用戶,可以使用如下命令安裝:

pacman -S ripgrep

Gentoo 用戶使用如下命令安裝 ripgrep:

emerge sys-apps/ripgrep

Fedoras 或者 Red Hat 使用如下命令:

sudo dnf install ripgrep

openSUSE(15.1及更新版本)用戶使用如下命令:

sudo zypper install ripgrep

Debian Buster(v10)或更高版本的用戶,可使用 apt;Ubuntu Cosmic Cutlefish(18.10)或更高級版本也可以使用發(fā)行版的官方存儲庫:

sudo apt install ripgrep

使用 ripgrep 命令

如果你熟悉 grep 命令,就會發(fā)現(xiàn) ripgrep 與其工作原理類似。它 接受一個字符串和文件名作為參數(shù) ,運(yùn)行時會搜索文件,并顯示輸入字符串與文件內(nèi)容匹配的位置。

基本搜索

如下例子,我們在 Cargo.html 中搜索單詞 description:

$ rg description Cargo.toml
3:description = "A more intuitive version of du"
53:extended-description = """\\

ripgrep 將在指定的文件中搜索,結(jié)果將顯示 匹配的文本和行號

圖片

如果搜索的是多個文件(如果不指定任何文件,它將搜索所有文件),那么ripgrep在搜索結(jié)果中還會顯示文件名:

圖片

或者,可以使用 --file 選項,其中包含要搜索的關(guān)鍵詞(表達(dá)式)。當(dāng)你要搜索一組關(guān)鍵詞時,可以將其放在一個文件中,然后使用 --file 選項指定:

圖片

前后文搜索

有時候,有匹配的前后文是很好的顯示方式,特別是在代碼庫中搜索時。使用前后文搜索,可以使用 -C 或者 --context 選項,該選項接受一個數(shù)值,并顯示匹配值的前一行和后一行:

圖片

有時,我們只希望看到上面的幾行,包括匹配的行;還有時候,我們只需要下面的行,包括匹配的行。使用選項 -A,或者 --after-context,后跟一個數(shù)值,將顯示每個匹配行后的幾行:

圖片

至于顯示匹配行前面的幾行,可以使用 -B 或者 --before-context,再提供一個數(shù)值(即行數(shù)):

圖片

列選項

關(guān)于 ripgrep 提供的列,有幾個選項。

如果你使用的是 vim,可以使用 --column 選項,這樣將在結(jié)果中顯示匹配文本在哪一列,以"行:列"的方式顯示:

圖片

與列相關(guān)的另一個選項是 -M 或 --max-columns,它取最大列數(shù)的值。如果匹配行的列超過最大值,它會告訴你某一特定行在輸出到終端時被忽略:

圖片

其他選項

除了上文中提到的,ripgrep 中還有其他幾個選項。比如:可以使用 -s 或 --case-sensitive 選項來區(qū)分大小寫:

圖片

如果不想?yún)^(qū)分大小寫,可以使用 -i 或 --ignore-case :

圖片

另外,如果你要搜索的目標(biāo)文件特別大,可以啟用多線程進(jìn)行搜索。使用 -j 或 --threads 選項,后跟一個數(shù)值:

$ rg -j 4 TODO

在搜索中要排除某個關(guān)鍵詞或表達(dá)式,可以使用 -v 或 --invert-match 選項:

圖片

ripgrep 可以實現(xiàn)在壓縮文件(如果壓縮文件是文本文件)中進(jìn)行搜索,使用 -z 或 --search-zip 選項。其通常與 -a 選項一起使用,-a 選項會將二進(jìn)制文件也當(dāng)作文本文件。

圖片

ripgrep 是一個非常好用的工具,雖然它暗指要替代 grep,但實際上并不會取代 grep,因為它們的搜索目標(biāo)是不同的。我們可以在日常工作中按需求來使用。

審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    595

    瀏覽量

    27448
  • UTF-8
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    7864
  • APT
    APT
    +關(guān)注

    關(guān)注

    1

    文章

    38

    瀏覽量

    10839
收藏 人收藏

    評論

    相關(guān)推薦

    在Boost電源中該怎樣選擇電容的型號和電容容量

    我們之前了解過電容的作用,不外乎儲能、濾波等作用。那么在Boost電源中又該怎樣選擇電容的型號和電容容量?
    發(fā)表于 08-14 15:44 ?3177次閱讀
    在Boost電源中該<b class='flag-5'>怎樣</b><b class='flag-5'>去</b>選擇電容的型號和電容容量<b class='flag-5'>呢</b>?

    怎樣設(shè)置數(shù)值元件的格式

    怎樣設(shè)置數(shù)值元件?怎樣設(shè)置數(shù)值元件的格式?
    發(fā)表于 09-26 09:16

    怎樣獲取Android的電池電壓

    怎樣獲取Android的電池電壓?怎樣獲取Android的電池電流
    發(fā)表于 10-09 08:39

    怎樣使用springboot

    怎樣使用springboot?學(xué)習(xí)springboot需要懂得哪些?
    發(fā)表于 10-25 07:13

    NOR FLASH的命令怎樣操作的

    NOR FLASH的原理是什么?NOR FLASH的命令怎樣操作的?
    發(fā)表于 10-29 07:29

    怎么確定u-boot編譯命令該用什么命令

    怎么確定u-boot編譯命令該用什么命令?怎樣搭建一種嵌入式linux驅(qū)動開發(fā)環(huán)境
    發(fā)表于 11-05 07:28

    怎樣使用HSE/HSI配置RCC的時鐘

    怎樣使用HSE/HSI配置RCC的時鐘?怎樣設(shè)置系統(tǒng)時鐘的庫函數(shù)
    發(fā)表于 11-10 07:08

    怎樣使用Linux操作命令與開發(fā)工具

    怎樣使用Linux操作命令與開發(fā)工具?Linux文件的屬性有哪些?
    發(fā)表于 12-23 09:41

    socket通信該怎樣實現(xiàn)

    socket通信該怎樣實現(xiàn)怎樣實現(xiàn)socket AES-CBC加密?
    發(fā)表于 01-20 07:41

    怎樣通過命令實現(xiàn)otg和host的動態(tài)切換

    怎樣通過命令實現(xiàn)otg和host的動態(tài)切換?求解答
    發(fā)表于 02-17 07:30

    怎樣寫回調(diào)函數(shù)怎樣使用回調(diào)函數(shù)

    回調(diào)函數(shù)的作用是什么?單片機(jī)怎么用回調(diào)函數(shù)在不同文件之間傳遞數(shù)據(jù)?怎樣寫回調(diào)函數(shù)?怎樣使
    發(fā)表于 02-23 07:40

    怎樣通過rkdevloptool燒寫三個文件

    怎樣編譯rkdevloptool命令?怎樣通過rkdevloptool燒寫三個文件
    發(fā)表于 03-07 07:39

    怎樣使用shell命令測試gpio并找到端口

    怎樣使用shell命令測試gpio并找到端口
    發(fā)表于 03-09 06:10

    RK3328 linux命令怎樣進(jìn)入gpio口的

    怎樣查看RK3328主板的gpio口?RK3328 linux命令怎樣進(jìn)入gpio口的?
    發(fā)表于 03-09 07:09

    fish-shell進(jìn)化為Rust項目

    ripgrep 是一款面向行的搜索工具,可以遞歸地在當(dāng)前目錄中搜索正則表達(dá)式模式。默認(rèn)情況下,ripgrep 將遵循 gitignore 規(guī)則并自動跳過隱藏文件/目錄和二進(jìn)制文件。ripgrep 在 Windows、macOS
    的頭像 發(fā)表于 11-29 16:25 ?426次閱讀