了解 Linux 中的 GREP:用法和應用
Grep 是一個緊湊的 UNIX 工具,專為模式搜尋而設計。它最初在 V6 UNIX 中引入,現已成為各種類 UNIX 作業系統(包括 Linux、macOS 和 BSD 變體)中的主要內容。在本文中,我們將探討 Grep 的基本功能,並提供其在日常任務中應用的實際範例。
了解 Grep 的基礎知識
Grep 的主要功能很簡單:它處理輸入以識別和顯示匹配的文字模式。該實用程式可以檢查幾乎任何純文字來源,使其能夠直接掃描文件或使用其他命令的輸出。
要開始使用 Grep,最簡單的命令之一是從文字檔案中讀取。例如,您可以sample.txt
使用以下命令顯示內容:
您也可以在文字檔案中搜尋特定單字:
此外,Grep 可以與 UNIX 管道結合使用,將多個命令統一為單一操作:
若要深入了解尋呼機在 Linux 中的運作方式,請參閱我們關於 GNU less 的備忘單。
在目錄中搜尋文件
Grep 的一項實際應用是在目錄中尋找檔案。您可以將命令的輸出ls
直接透過管道傳輸到 Grep 中。
例如,此命令將透過突出顯示其副檔名來顯示「下載」目錄中的所有 JPEG 檔案:
您可以擴展ls
輸出並執行更複雜的模式匹配。例如,以下命令列出目前目錄中所有小於1MB的檔案:
忽略大寫
預設情況下,大多數類 UNIX 工具都對大小寫區分敏感。這意味著字串“Hello”、“hello”、“hEllo”和“helLo”被解釋為不同的條目。
這可能會使文字搜尋變得複雜,尤其是當存在不同大小寫的單字時。為了緩解這種情況,您可以使用帶有-i
與搜尋字詞配對的標誌的 Grep:
遞迴搜尋
Grep 能夠同時搜尋多個檔案或整個目錄。當檢查具有各種文件的項目並且您希望在整個目錄中查找特定文本的出現時,這特別有用。例如,使用以下命令在“sample”目錄中找到術語“MakeTechEasier”:
值得注意的是,使用該-r
標誌會強制 Grep 檢查指定目錄中的所有文件,其中可能包括非文字文件。為了避免這種情況,-I
也可以使用該標誌:
識別具有特定字串的文件
除了顯示字串在檔案中出現的位置之外,Grep 還可以產生包含您正在搜尋的文字的檔案清單。當您想要確定文件是否具有特定內容而不顯示找到的每個實例時,這非常有用。
要實現此目的,請使用帶有以下標誌的 Grep,-r
和-l
,以及您的目標字串和您要搜尋的目錄:
此外,您可以將 Grep 指令封裝在 Bash 子 shell 中以強制執行多個搜尋條件。例如,以下指令將傳回「sample」目錄中包含「Hello」和「MakeTechEasier」的檔案:
顯示不匹配的結果
除了標準搜尋之外,Grep 還可以產生排除您指定條件的結果。當您需要偵測文字輸入中的錯誤或不規則之處時,此功能非常有用。
若要執行此操作,請將該-v
標誌與您的首選選項結合使用。例如,以下命令遞歸掃描“/etc/nginx”目錄中的所有文件,並傳回不包含字串“nginx”的所有行:
搜尋單字和行
指示 Grep 搜尋整個單字或整行而不是任何符合特定模式的字串也可能是有益的。當針對各種單字中普遍存在的字元序列時,此方法特別有用。例如,搜尋術語“it”可能會產生大量誤報,因為它出現在許多其他單字中。
要解決這個問題,請使用該-w
標誌運行 Grep,後跟您想要的單字:
Grep 不會傳回包含搜尋模式的所有實例,而是僅輸出單字本身。當使用該標誌時,這也適用於整行-x
,這使得它對於在設定檔中定位短語或精確行特別有用。
在 Grep 輸出中合併行號
行號在調試程式碼和審查文件中起著至關重要的作用。它們簡化了精確定位特定線路或功能位置的過程,顯著加快了修訂速度。
Grep 提供在其輸出中包含行號的功能。您可以透過執行帶有該-n
標誌和搜尋字詞的命令來啟動此功能:
與 UNIX 管道結合使用時,您可以最佳化 Grep 的輸出以僅顯示搜尋結果的行號。這種方法對於處理大量文字特別有用:
透過 Grep 使用擴展正規表示式
Grep 使用基本正規表示式 (BRE) 作為其符合文字的主要元字元。雖然這對於各種任務都有效,但使用者可能會發現它具有限制性,特別是在檢查模式群組時。
為了擴展功能,許多 Grep 實作合併了該-E
標誌以啟用擴展正規表示式 (ERE) 的解析。例如,下面的命令需要該-E
標誌:
此外,Grep 有一種特殊模式,可以完全消除正規表示式功能。要激活它,請運行帶有標誌的命令,-F
後面跟著一個簡單的字串:
在 Grep 輸出中包含周圍的行
Grep 的優點在於顯示文字在輸入或檔案中出現的位置。然而,在故障排除時,僅顯示確切位置可能還不夠。圍繞字串的上下文(例如崩潰日誌中的上下文)通常可以提供重要的見解。
要列印其他上下文,您可以運行 Grep,將-C
標誌與您希望在搜尋結果之前和之後顯示的行數結合。例如,若要顯示目標字串周圍的五行,請使用下列命令:
-B
您也可以使用和標誌選擇性地僅列印前一行或後一行來自訂結果-A
。例如,下面的命令將顯示搜尋字詞後面的十行:
現在您已經掌握了 Grep 的基礎知識以及如何利用它來執行常見任務,您可以更深入地研究命令列和更廣泛的 UNIX 生態系統。透過學習如何在 Linux 中使用 sed 進行更強大的文字處理來進一步探索。
圖片來源:Alejandro Escamilla,來自 Unsplash。所有修改和螢幕截圖均由 Ramces Red 完成。
發佈留言