1. 程式人生 > >如何使用Grep命令查詢多個字串

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

## 如何使用Grep 命令查詢多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 `grep` 命令查詢多個字串。 簡單介紹一下,`grep` 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則表示式相匹配的文字,然後再將每個匹配的文字用標準輸出的格式寫出來。 因此,良許向大家分享一下如何使用 `grep` 命令的多種搜尋模式以及使用 `grep` 搜尋多個字串: #### 多模式 Grep 命令 `grep` 命令支援三種正則表示式語法:**Basic**、**Extended** 和 **Perl-compatible** 。當沒有指定正則表示式型別時,`grep` 命令將搜尋模式預設為基本正則表示式。 要搜尋多個匹配模式,可以使用 **OR** ( **alternation** ) 運算子。我們可以用 **OR** 運算子 **|**( **pipe** )指定不同的匹配項,這些匹配項可以是文字字串,也可以是表示式集。值得注意的是,在所有正則表示式運算子中,這個運算子的優先順序是最低的。 使用 `grep` 命令基本正則表示式搜尋多個匹配模式的語法如下: ``` $ grep 'pattern1\|pattern2' filename ``` 這裡需要注意的是,始終要用單引號將正則表示式括起來,因為單引號內的內容原樣輸出,被單引號括起的內容不管是常量還是變數不會發生替換。 使用基本正則表示式時,元字元被解釋為字面字元。要保留元字元的特殊含義,必須用反斜槓( \ )對它們進行轉義。這就是為什麼我們要轉義 **OR** 運算子(**|**)。 要將模式解釋為擴充套件正則表示式,請呼叫 `grep -E`(或 `--extended-regexp` )選項。使用擴充套件正則表示式時,不需要對 **OR** 運算子 (**|**) 進行轉義: ``` $ grep -E 'pattern1|pattern2' file ``` #### Grep命令搜尋多個字串 通常我們認為,文字字串是最基本的模式。 接下來我們將示例,搜尋某使用者日誌錯誤檔案中出現的所有 **fatal**、**error** 和 **critical** 字串。語法如下: ``` $ 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 ``` 當你只想搜尋某個單詞時,比如你想搜尋的是單詞 `error` ,`grep` 命令會輸出所有包含 `error` 字串的行,即它除了會輸出包含 `error` 單詞的行,還會輸出包含 `errorless` 或 `antiterrorists` 等非 `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 ### 有收穫?希望老鐵們來個三連擊,給更多的人看到這