Grep 代表全局正則表達式打印。 它是一個很有用的命令,被 Linux 系統工程師廣泛使用,在針對常規文件和系統中搜索字符串或模式時。
在本文中,我將通過大量示例來演示 grep 命令的用法。 我已經在 Debian 10 機器上測試了所有命令和示例。
先決條件
您需要擁有一台具有 root 權限的 Debian 10 機器。
在 Debian 10 上安裝 grep 命令
默認情況下,grep 安裝在包括 Debian 10 在內的大多數係統上。如果沒有安裝,請打開終端並使用 root 權限發出以下命令。
apt-get 安裝 grep
當系統要求您確認時,按 y,然後從鍵盤輸入。 等待安裝完成。
由於我的機器上已經安裝了 grep,請查看上面的屏幕截圖。 讓我們通過在終端上運行以下命令來檢查它的版本。
grep –version
它還應該返回版本以及其他詳細信息,如下所示。
使用 grep 命令
一旦我們的機器上有 grep 命令可用,我們就可以使用它了。
搜索系統中的特定文件或目錄
當您要搜索或定位系統中的特定文件時,該命令的語法應如下所示。
ls -l <pathofdirectorytosearch> | grep -i “文件或目錄名”
我想在 /etc/ 中搜索網絡目錄。 完整的命令應如下所示。
ls -l / etc / | grep -i “網絡”
‘i’ 選項忽略大小寫敏感。 因此,它應該將網絡、網絡或網絡視為相似。
下面是示例輸出。
假設我想搜索位於 /etc/network/ 的“interfaces.d”文件,您必須運行以下命令。
ls -l /etc/network/ | grep -i “interfaces.d”
如果要查找的單詞包含空格,則必須用雙引號將其包含在內。 假設我們正在搜索“network daemon”,上面的命令應該如下所示。
ls -l /etc/network/ | grep -i “接口守護進程”
用grep搜索一個完整的詞
您可能已經註意到,grep 會返回包括“網絡”在內的各種結果,例如networking、networked、networking 或abcnetworking 等。如果您想限制搜索以包含該特定詞,則必須使用-w 選項,如下所示。
ls -l /etc/ | grep -i -w 網絡
下面是示例輸出。
搜索文件中的特定文本
我們有一個案例,當您有一個大文件並且想要搜索特定文本時。 命令的語法應如下所示。
grep – i “textyouwanttosearch” “filenameandpath”
假設我想在位於當前目錄內的 test.txt 中搜索單詞“fox”。 在終端上運行以下命令。
grep -i “fox” test.txt
下面是示例輸出,它僅返回文件中包含單詞“fox”的那些行。
執行遞歸搜索(在多個文件中搜索)
如果要從目錄內的大量文件和子目錄中搜索文本,可以使用 -r 選項執行遞歸研究。
grep -i -r “狐狸”
下面是示例輸出,顯示單詞 fox 出現在所示行中的 test.txt 和 tree.txt 文件中。
您還可以提供目錄路徑,它將搜索該目錄及其子目錄中的所有文件。
假設我想對 /etc/ 及其子目錄中的文本“interfaces”進行遞歸研究。 該命令應按如下方式執行。
grep -i -r 接口 /etc/
下面是示例輸出。
使用單個 grep 命令搜索兩個不同的單詞
您可以使用單個 egrep(grep 的變體)命令搜索兩個不同的單詞,如下所示。 假設我想使用 -r 選項在多個文件中搜索完整的單詞 fox 和 lazy 。 您必須在終端上運行以下命令。
egrep -w -r “狐狸|懶惰”
下面是示例輸出。
編號與文本匹配的行
另一個有用的選項是 -n 對匹配文本的行進行編號。 以下是 example 說明如何使用 -n 選項。
grep -i -n “fox” test.txt
以下是對與單詞“fox”匹配的行進行編號的示例輸出。
反轉搜索
這與我們上面所做的相反。 如果要返回不包含指定單詞的文本,可以使用 -v 選項。
下面是 example 演示 -v 選項的使用。
grep -v -i “fox” test.txt
下面是示例輸出。
以上所有選項(-n 等)也可以與 -v 選項一起應用。
計算比賽
如果您只想計算與特定文本匹配的次數,您可以使用 -c 選項。
讓我們數一下位於當前目錄內的 test.txt 中的“fox”這個詞。 在終端上運行以下命令。
grep -i -c fox test.txt
以下是執行上述命令後的示例輸出,顯示單詞 fox 在 test.txt 文件中匹配三次。
顯示與特定文本匹配的文件名
如果您想找出包含您的特定單詞的文件,您可以將 -l 選項與 -r 一起使用,如下所示。 假設所有文件都位於您當前的目錄中,並且您正在搜索或匹配的特定單詞是“fox”。
grep -i -r -l 狐狸
下面是示例輸出,顯示單詞 fox 存在於 test.txt 以及子目錄和文件 asif.txt 中
只顯示匹配的文本
默認情況下,grep 顯示與您想要的文本或單詞匹配的整行。 如果您希望 grep 向您顯示匹配的單詞,您可以使用 -o 選項,如下所示。
grep -i -o fox test.txt
下面是示例輸出。
顯示以特定單詞開頭的行
如果要檢索以特定單詞開頭的所有行,可以使用 ^ 運算符,如下所示。
假設您要返回所有以“unix”開頭的行,並且文件是位於當前目錄中的 log.txt。
在終端上運行以下命令。
grep -i “^unix” log.txt
下面是示例輸出。
顯示以特定單詞結尾的行
如果要從以特定單詞結尾的文件中返回所有這些行,可以按如下方式使用 $ 運算符。 假設單詞是“linux”,並且您要搜索的文件是位於當前目錄中的 rev.txt。
在終端上運行以下命令。
grep -i “linux$” rev.txt
下面是示例輸出。
結論
所以這是我關於 grep 命令用法的教程。 我已經演示了大多數 grep 選項,這些選項最常用,您可能在日常工作中需要這些選項。 grep 命令有一些變體,包括 zgrep 等。您可以自己探索它們。