在匹配特定條件的檔案上使用 grep


Grep(全域性正則表示式列印)命令匹配並在正則表示式中搜索特定模式。此命令過濾並搜尋特定字元模式,並將它們顯示為輸出。它被認為是 Unix/Linux 類系統上系統管理員和開發人員最有用命令之一。

Linux 包含各種型別的命令和實用程式來簡化每個任務。與其他作業系統不同,在 Linux 中查詢任何檔案都很簡單,因為您可以使用 grep 命令搜尋任何檔案。

您可以使用 grep 命令顯示包含您要查詢的特定模式的特定檔案的名稱。但是,在 Linux 中使用 grep 命令時,您應該遵循一些事項 -

  • 預設情況下,Grep 是區分大小寫的命令。因此,您必須使用 -i 選項來匹配不區分大小寫的模式。

  • 您必須在 grep 命令中使用引號來搜尋對 shell 具有特殊意義的字元。

  • Grep 命令顯示包含特定字元的整行。因此,您必須僅使用 -o 選項來顯示檔名和搜尋的字元。

在本簡短指南中,我們將對匹配 Linux 上特定條件的檔案使用 grep。

在 Linux 上使用 Grep 匹配特定條件的檔案

grep 命令預裝在大多數 Linux 發行版中。讓我們在“文件”目錄中建立一些示例檔案,並在這些檔案中匹配字串或正則表示式。

~$: sudo tree Documents 
Documents
|__ sample1
|__ sample2
|__ sample3

0 directories, 3 files

現在,我們將透過 Linux 中 grep 命令的不同選項搜尋這些示例檔案。

在檔案上匹配區分大小寫的搜尋

如果您必須使用 grep 在檔案中查詢確切的單詞和模式,則它屬於區分大小寫的搜尋。

grep <pattern> <filename1> <filename2>.....

在這裡,我們將搜尋“unix”在“文件”目錄中的所有檔案中。

為此,請使用以下命令 -

~$: grep unix sample1 sample2 sample3
sample1:unix
sample3:unix operating system

上述命令匹配提到的模式並顯示包含“unix”的檔案。

在檔案上匹配不區分大小寫的搜尋

您可以使用上述命令中的 -i 選項不區分大小寫地搜尋任何模式 -

grep -i <pattern> <filename1> <filename2>.....

讓我們顯示所有與“unix”相關的結果,但終端將顯示所有包含“Unix”或“unix”的檔案。

~$: grep -i "unix" sample1 sample2 sample3
sample1:unix
sample1:Unix
sample2:Unix
sample3:unix operating system

僅搜尋匹配的模式

預設情況下,grep 命令顯示整個段落或行。您可以透過在 grep 命令中使用 -o 選項來僅顯示模式而不是整個段落或行。

grep -o "<pattern>" <filename>

在這裡,我們將透過 grep 命令及其 -o 選項搜尋“Linux” -

~$: grep -o "Linux" sample1 sample3
sample1:Linux

搜尋與模式匹配的檔名

如果要搜尋包含特定模式或字串的檔案,請使用以下命令 -

grep -l "<pattern>" <filename1> <filename2>.....

或者,

grep -l "<pattern>" *

例如,以下命令將顯示當前目錄中包含“linux”一詞的檔案的名稱 -

~$: grep -l "linux" *
sample1
sample3

匹配任何模式

使用以下 grep 命令顯示與檔案中任何單詞、模式等匹配的特定字元。

grep "..<letter_pattern>" <filename>

在這裡,以下命令顯示“Linux”和“Unix”這兩個模式,它們以“x”結尾。

~$: grep "..x" sample1 sample3
sample2:Linux
sample2:Linux
sample2:Unix
sample3:linux
sample3:unix operating system.

匹配反轉模式

您只能匹配與提到的模式不相同的行。在這種情況下,您可以按如下所示在 grep 命令中使用 -v 選項 -

grep -v "<pattern>" <filename>

例如,我們將搜尋不包含“Linux”一詞的檔案。

~$: grep -v "Linux" sample1 sample2 sample3
sample1:GNU operating system
sample1:gnu
sample1:Gnu
sample:unix
sample1:linux
sample1:unix
sample2:GNU
sample2:unix
sample3:linux
sample3:unix operating system.
sample3:gnu operating system.

匹配以特定單詞/字串開頭的模式

正則表示式模式“^”定義段落或行的開頭。使用以下 grep 命令,您可以顯示以特定模式或字串開頭的行。

grep "^<pattern>" <filename>

在以下命令中,我們將使用 grep 命令在檔案中搜索“gnu” -

~$: grep "^gnu" sample2 sample3
sample3:gnu operating system.

匹配以特定單詞/字串結尾的模式

正則表示式模式“$”定義段落/行的結尾。使用此表示式與 grep 命令一起,您可以匹配以提到的模式/單詞結尾的行或段落。

grep "<pattern>$" <filename>

例如,我們將搜尋多個檔案中的“system” -

~$: grep "system$" sample1 sample2 sample3
sample3:unix operating system.
sample3:gnu operating system.

遞迴匹配目錄中的模式

如果要匹配整個目錄中的模式而不是目錄中的特定檔案,則可以使用 -R 選項與 grep 命令一起使用,如下所示 -

grep -R <pattern> <directory>

現在,我們將遞迴執行 grep 命令以查詢“文件”目錄中包含“GNU”的檔案 -

~$: grep -R GNU Documents
Documents/sample2:GNU
Documents/sample1:GNU operating system

額外提示 - 如果要匹配當前目錄中所有檔案中存在的特定模式,則可以使用 -w 選項與 grep 命令一起使用,如下所示 -

grep -w <pattern> *

匹配具有特定副檔名的檔案

使用以下命令搜尋目錄中包含特定副檔名的檔案中的模式

grep -R --include=*.<file_extention> '<pattern>' <directory>

在下面的示例中,grep 命令僅檢查副檔名為“.txt”的檔案中的提到的模式。

~$: grep -R --include=*.txt 'Linux' Documents
Documents/sample1.txt:Linux is a kernel

注意 - 您還可以使用上述命令一次匹配多個副檔名的檔案中的模式。

結論

grep 命令是在 Linux 中透過終端過濾具有特定模式的檔案的絕佳方法。在本指南中,我們透過各種示例解釋了透過各種條件匹配檔案的方法。使用 grep 命令非常容易,您也可以透過上面的一些示例看到它。因此,您只需點選幾下即可使用 grep 命令在 Linux 中搜索任何模式、行、單詞等。

更新於: 2023年5月18日

1K+ 閱讀量

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告