如何使用Grep命令查找多個字元串

如何使用Grep 命令查找多個字元串

大家好,我是良許!

今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字元串。

簡單介紹一下,grep 命令可以理解為是一個功能強大的命令行工具,可以用它在一個或多個輸入文件中搜索與正則表達式相匹配的文本,然後再將每個匹配的文本用標準輸出的格式寫出來。

因此,良許向大家分享一下如何使用 grep 命令的多種搜索模式以及使用 grep 搜索多個字元串:

多模式 Grep 命令

grep 命令支援三種正則表達式語法:BasicExtendedPerl-compatible 。當沒有指定正則表達式類型時,grep 命令將搜索模式默認為基本正則表達式。

要搜索多個匹配模式,可以使用 OR ( alternation ) 運算符。我們可以用 OR 運算符 |pipe )指定不同的匹配項,這些匹配項可以是文本字元串,也可以是表達式集。值得注意的是,在所有正則表達式運算符中,這個運算符的優先順序是最低的。

使用 grep 命令基本正則表達式搜索多個匹配模式的語法如下:

$ grep 'pattern1\|pattern2' filename

這裡需要注意的是,始終要用單引號將正則表達式括起來,因為單引號內的內容原樣輸出,被單引號括起的內容不管是常量還是變數不會發生替換。

使用基本正則表達式時,元字元被解釋為字面字元。要保留元字元的特殊含義,必須用反斜杠( \ )對它們進行轉義。這就是為什麼我們要轉義 OR 運算符(|)。

要將模式解釋為擴展正則表達式,請調用 grep -E(或 --extended-regexp )選項。使用擴展正則表達式時,不需要對 OR 運算符 (|) 進行轉義:

$ grep -E 'pattern1|pattern2' file

Grep命令搜索多個字元串

通常我們認為,文字字元串是最基本的模式。

接下來我們將示例,搜索某用戶日誌錯誤文件中出現的所有 fatalerrorcritical 字元串。語法如下:

$ grep 'fatal\|error\|critical' /var/log/nginx/error.log

還需要注意的是,如果要搜索的字元串包含空格,需要用雙引號將其括起來。

下面是使用擴展正則表達式的同一個示例,它不需要轉義字元:

$ grep -E 'fatal|error|critical' /var/log/nginx/error.log

默認情況下,grep 命令是區分大小寫的。要在搜索時忽略大小寫,請調用 grep-i (或 --ignore-case )選項,示例如下:

$ grep -i 'fatal|error|critical' /var/log/nginx/error.log

當你只想搜索某個單詞時,比如你想搜索的是單詞 errorgrep 命令會輸出所有包含 error 字元串的行,即它除了會輸出包含 error 單詞的行,還會輸出包含 errorlessantiterrorists 等非 error 單詞的行,這樣是極不方便的。

因此要僅返回指定字元串是整詞的行,或者是由非單詞字元括起來的行,可以使用 grep-w (或 --word-regexp )選項:

$ grep -w 'fatal|error|critical' /var/log/nginx/error.log

值得注意的是,單詞字元包括有字母、數字字元(比如 a-z、a-Z 和 0-9 )以及下劃線( _ ),所有其他字元都被視為非單詞字元。

總結

在工作中,我們經常需要用到 grep 命令來搜索字元串,學會了使用 grep 搜索多個字元串這個技巧,一定有機會用上的。實際上,grep 命令遠不止本文所講的功能,如果你對 grep 命令的功能有任何疑問或者還想學習它的其他功能,請留言告訴我唄!


公眾號:良許Linux

有收穫?希望老鐵們來個三連擊,給更多的人看到這篇文章