有的時候,我們需要在應用日志中搜索關鍵詞前后的的報錯信息,但是由於應用的日志很多,我們只想查詢關鍵詞第一次或者最后一次出現的地方的前后幾行日志,這時,就可以使用grep和管道命令處理了。
更多關於Linux命令的傳送門——《五分鍾掃盲:25個工作中常用的Linux命令》。
常用查詢
先提供兩個常用查詢語句,再分析語法。以文件/etc/man.config為例進行舉例。
首次出現位置
取出文件中關鍵詞keyword首次出現的前2行:
grep -A "keyword" /etc/man.config | head -2
最近一次出現位置
在文件中查找關鍵詞keyword最近出現的前2行記錄:
grep -B "keyword" /etc/man.config | tail -2
查詢關鍵詞所在記錄
取出文件/etc/man.config中包含關鍵詞keyword的所有記錄:
grep "keyword" /etc/man.config
查詢關鍵詞所在位置
語法:grep [-acinv] [-A/B/C lineNum] [--color=auto] [“keyword”] [fileName]|[head/tail -lineNum]
參數:
-a :將 binary 文件以 text 文件的方式搜尋數據
-c :計算找到關鍵詞keyword 的次數
-i :忽略大小寫的不同,所以大小寫視為相同
-n :順便輸出行號
-v :反向選擇,亦即顯示出沒有keyword內容的那一行!
-A lineNum:A應該是After的意思,輸出匹配字符串后多少行,-A3 顯示后三行
-B lineNum:B應該是Before的意思,輸出匹配字符串前多少行,-B 2 顯示前兩行
-C lineNum:C應該是Center的意思,輸出匹配字符串前后多少行,-C2 顯示前后兩行
–color=auto :將找到的關鍵詞部分高亮顯示
keyword:關鍵詞,即待匹配字符串
fileName:包括文件路徑在內的文件名
|:管道命令符,它及其后面的命令可以不用
head/tail:head表示查詢關鍵詞首次出現的地方,而tail與之相反。其后的lineNum表示需要打印的行數,語法中前后出現兩次lineNum,如果同時出現,依后面的為准。
功能:文本搜索工具,類似於正則表達式搜索,用於在一個大的文件中快速搜索滿足一定規則的內容,查到就將關鍵詞以某種顏色高亮顯示。
說明:grep是Global Regular Expression Print 的縮寫,分析一行的信息,若有關鍵詞出沒,就將該行打印出來。該命令通常與管道命令一起使用,用於對一些命令的輸出進行篩選加工等等。
例1 取出文件/etc/man.config中包含關鍵詞keyword的所有行,記錄按照時間升序打印,並把找到的關鍵字加上顏色高亮顯示:
grep --color=auto "keyword" /etc/man.config
此種打印方式用於找出包含關鍵詞的所有行,關鍵詞高亮顯示。
例2 取出文件/etc/man.config中關鍵詞keyword所在行及其后1行的所有行,記錄按照時間升序打印:
grep -A2 "keyword" /etc/man.config
此種打印方式適用於關鍵詞比較精確、且關鍵詞出現次數比較少的場景。
例3 取出文件/etc/man.config中關鍵詞keyword首次出現的前2行:
grep -B10 "keyword" /etc/man.config | head -2
例4 在文件/etc/man.config中,查找關鍵詞keyword首次出現的后2行記錄:
grep -A10 "keyword" /etc/man.config | head -2
檢索關鍵詞並把把日志寫入新文件
搜索關鍵字出現的位置,並把日志寫入另一文件,如果文件存在則覆蓋其內容。
語法:grep [-acinv] [-A/B/C n] [--color=auto] [“keyword”] [fileName]|[head/tail -n] > anotherFileName
>
命令表示覆蓋寫入,如果使用>>
,則表示追加寫入。
例5 (搜索關鍵字最后一次出現位置的前后M行記錄,並寫入文件newFile.log,如果文件存在則追加
grep -A 10 "keyword" /etc/man.config >> newFile.log | tail -2
結束語
《Linux 在多個文件中搜索關鍵字》將詳細闡述如何在當前目錄下的多個文件里搜索某個關鍵詞。
歡迎點贊閱讀,一同學習交流;若有疑問,請在文章下方留下你的神評妙論!以促使博文💯高質量。