你們好,我是良許!nginx
今天向你們介紹一個很是有用的技巧,那就是使用 grep
命令查找多個字符串。程序員
簡單介紹一下,grep
命令能夠理解爲是一個功能強大的命令行工具,能夠用它在一個或多個輸入文件中搜索與正則表達式相匹配的文本,而後再將每一個匹配的文本用標準輸出的格式寫出來。面試
所以,良許向你們分享一下如何使用 grep
命令的多種搜索模式以及使用 grep
搜索多個字符串:正則表達式
grep
命令支持三種正則表達式語法:Basic、Extended 和 Perl-compatible 。當沒有指定正則表達式類型時,grep
命令將搜索模式默認爲基本正則表達式。架構
要搜索多個匹配模式,可使用 OR ( alternation ) 運算符。咱們能夠用 OR 運算符 |( pipe )指定不一樣的匹配項,這些匹配項能夠是文本字符串,也能夠是表達式集。值得注意的是,在全部正則表達式運算符中,這個運算符的優先級是最低的。less
使用 grep
命令基本正則表達式搜索多個匹配模式的語法以下:工具
$ grep 'pattern1\|pattern2' filename
這裏須要注意的是,始終要用單引號將正則表達式括起來,由於單引號內的內容原樣輸出,被單引號括起的內容無論是常量仍是變量不會發生替換。學習
使用基本正則表達式時,元字符被解釋爲字面字符。要保留元字符的特殊含義,必須用反斜槓( )對它們進行轉義。這就是爲何咱們要轉義 OR 運算符(|)。網站
要將模式解釋爲擴展正則表達式,請調用 grep -E
(或 --extended-regexp
)選項。使用擴展正則表達式時,不須要對 OR 運算符 (|) 進行轉義:命令行
$ grep -E 'pattern1|pattern2' file
一般咱們認爲,文字字符串是最基本的模式。
接下來咱們將示例,搜索某用戶日誌錯誤文件中出現的全部 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學習路線圖,因而我根據本身的經驗,利用業餘時間熬夜肝了一個月,整理了一份電子書。不管你是面試仍是自我提高,相信都會對你有幫助!
免費送給你們,只求你們金指給我點個贊!
也但願有小夥伴能加入我,把這份電子書作得更完美!
推薦閱讀: