在匹配特定條件的檔案上使用 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 中搜索任何模式、行、單詞等。