01 一起來認識 grep!
Linux 命令三劍客,sed、grep、awk。
- sed:擅長資料修改。
- grep:擅長資料查詢定位。
- awk:擅長資料切片,資料格式化,功能最複雜。
grep 可以說是這三個命令中的紅人,是我們日常使用頻率最高的命令,下面和鍋鍋一起來搞定它。
02 grep 命令常用可選引數
- -n # 顯示行號。
- -i # 不區分大小寫。
- -c # 統計匹配行,命中查詢字串的總行數。
- -v # 顯示不包含匹配文字的所有行。
- -r # 遞迴處理。
- -E # 使用正規表示式作為匹配進行查詢(注:-e 沒有-E 支援的完整)。
- --include # 指定匹配的檔案型別。
- --exclude # 過濾不需要匹配的檔案型別。
使用示例:
- grep -i "error" info.log
- grep -in "error" info.log #不區分大小寫,並顯示行號。
03 grep 同時查詢多個檔案
- grep -in "key" info.log warn.log # 從檔案info.log 和 warn.log 查詢字串"key",不區分大小寫,並顯示行號。
- grep -n "key" * # 查詢當前目錄下所有檔案中包含字串"key",並顯示對應的行號。
04 grep 遞迴查詢
前面已經總結過,-r/R引數,即 recursion,遞迴的意思。
- grep -rn "key" * # 遞迴查詢當前目錄及其子目錄所有檔案中包含字串"key",並顯示對應的行號。
05 grep 查詢對應字元前後 n 行
- grep -a10 "bug" info.log #檢視"bug"字元後的10行,a->after。
- grep -b10 "bug" info.log # 檢視"bug"字元前的10行,b->before。
- grep -c10 "bug" info.log # 檢視"bug"字元前後各10行。
06 grep 常用組合命令示例
- history|grep rm # 查詢歷史命令中執行了哪些刪除命令。
- cat *.log | grep 'exception' # 查詢當前目錄下所有log日誌中的exception字元行。
- ps -ef|grep java # 此命令為一般運維中最常用命令,查詢linux程式中是否執行了此程式。
- rpm -qa |grep yum # 查詢linux下是否有安裝過此rpm包。
- grep -En '^2020' info.log # 使用正規表示式查詢,查詢以 2020 開頭的行,並顯示其行號。
- grep -rn "warn" * --include "*.log" # 遞迴查詢當前目錄及其子目錄所有log型別檔案中包含字串"warn",並顯示對應的行號。
- netstat -nap|grep -E "6651"|grep -E "203.130.41.24" # 多個條件過濾查詢。
- tail -1000f info.log | grep -E "aaa|bbb" # aaa 或 bbb 的條件都可以搜尋到,這個命令實踐中,滾動實時檢視日誌很常用。
- tail -10000f info.log |grep 'check' >> call.log # 查詢,並把符合規則的輸出到對應檔案中
- grep -E 'keyword1.*keyword2' info.log # 多個關鍵字同時出現查詢過濾
- grep -E '^Error' info.log |grep 'failed'|awk -F ' ' '{print $10}' # 查詢以 Error 開頭,過濾包含 failed 的行,並以空格分隔,輸出第10個的內容
07 grep 相關的擴充命令
- pgrep:查詢正在執行的程式,pgrep 是 grep 的擴充套件功能,同樣的還有 egrep、fgrep。
- egrep:擴充套件正規表示式,相當於grep –E。
- fgrep:不識別解析正規表示式,一般很少用。
08 小結
- grep 命令,擅長查詢字串,正向查詢,反向查詢,正則查詢,多檔案查詢,遞迴查詢等。
- grep 查詢對應字元前後 n 行,對大日誌檢索關鍵字時比較有用。此外 grep 還可以配合其他命令一起大展身手!配合正規表示式,可以更加靈活的實現查詢功能,正規表示式相關的內容前面的文章有一些總結。
「不甩鍋的碼農」原創,轉載請註明來源,未經授權禁止商業用途!同名 GZH 請關注!