文章目錄
使用 grep 搜尋多個值
這是在 production 查資料時遇到的需求:想要從 log file 中同時查出符合 關鍵字1
或是 關鍵字2
的資料,相信熟悉的朋友一定可以馬上回答出這個需求的正確做法,無奈小弟太弱,加上不是很常用,每次需要時都要再查一次資料,雖然資料不難找,但需要用時都在 production,就是正急的時候,所以決定紀錄一下,臨時要用時可以更快找到
基本環境說明
- macOS Monterey 12.0.1
- grep (BSD grep, GNU compatible) 2.6.0-FreeBSD
模擬的 log 資料
test.log
2021-12-17 09:00:38.192 [172][ERR][Demo.DomainService.Test.Application.Utilities.ExceptionInterceptor]General error message:"UserId:TW001|Name:Yowko|DepartmentId:D01" traceId:yowkotraceid 2021-12-17 09:00:38.192 [172][ERR][Demo.DomainService.Test.Application.Utilities.ExceptionInterceptor]General error message:"UserId:SG001|Name:Tsai|DepartmentId:B01" traceId:tsaitraceid 2021-12-17 09:00:38.192 [172][ERR][Demo.DomainService.Test.Application.Utilities.ExceptionInterceptor]General error message:"UserId:JP001|Name:Yua|DepartmentId:AV01" traceId:yuatraceid
使用方式
使用多個
-e
語法
grep -e {關鍵字1}[ -e {關鍵字2}] {檔案名稱}
範例
grep -e Yowko -e Yua test.log
實際效果
使用 regular expression
語法
grep '{關鍵字1}[\|{關鍵字2}]' {檔案名稱}
範例
grep 'Yowko\|Yua' test.log
實際效果
使用 extended regular expressions
使用
-E
語法
grep -E '{關鍵字1}[|{關鍵字2}]' {檔案名稱}
範例
grep -E 'Yowko|Yua' test.log
實際效果
使用
egrep
搜尋結果沒有高亮顯示
語法
egrep '{關鍵字1}[|{關鍵字2}]' {檔案名稱}
範例
egrep 'Yowko|Yua' test.log
實際效果
心得
身為偷懶的工程師,我不會選用多個 -e
,用傳統 regular expression 個人覺得有點難看或者該說容易讓真正要搜尋的內容失焦,而 egrep
則是因為結果沒高亮 我也不會選,所以原則上 我大多都是使用 extended regular expressions (-E
),不過還是看使用當下的情境來選擇
如果使用時遇到關鍵字可能會被誤判為 grep 的 option,可以在 option
與 關鍵字
間加上 --
來區隔,例: grep -E -- 'Yowko|Yua' test.log
參考資訊
文章作者 Yowko Tsai
上次更新 2021-12-17
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。