2012-10-26 41 views
2

我有一個日誌文件,它具有如下所示的行。Shell腳本:在日誌的每一行中查找一個字符串併發送電子郵件

10.10.205.100 100.10.56.5 - [23/Oct/2012:15:30:01 +0000] "GET /way/?cb=777:Obj.Status&log=signing_in_service&cache=1350334642666 HTTP/1.1" 200 53 "https://www.sample.com/signin?off=undefined&questions=&nouser=&link=%23&country=origin&displayLayer=" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2" "PD_STATEFUL_d64f218a-fa6a-11e0-b7df-623c1eeb9903=%2Fgateway; PD-ERR=0x132120c8; PD-HOST=sample.com; PD-REFERER=https://www.sample.com/profile%3Fundefined%3D; PD-REFPAGE=signin_user; pSite=; __SIGNIN=signin%23cw%3D400%3Ach%3D321; mmcore.pd=916254201%7CAgAAAAoBQvp/zPBKCBGRP6QBAOZMgV9Kf89IAAsAAAAtzSlGSn/PSAAAAAD/////AEoIAQAAAAAAAQAAAAAA////////////////AAAAAAABRQ%3D%3D; mmcore.srv=cg4.use; mmid=-1116944464%7CAgAAAAr6f8zwSggAAA%3D%3D; mmcore.tst=0.155; PD-SGNPAGE=http%3A%2F%2Fwww.sample.com%2Fcommon%2Fregister%2Feproxy.html; UnicaNIODID=A3nRYVRjMyy-Xv66UJt; survey=1350334587161" 

我想在上面的行中得到http狀態碼是200。這將放在字符串HTTP/1.1之後,http的版本(這裏是1.1)在所有行中可能並不常見。我要一起發送一封電子郵件,日誌文件

回答

2

你有HTTP/後的數字是HTTP版本號有沒有HTTP的許多版本(HTTP 1.0和HTTP 1.1)所以這個WIL工作:。

awk -F"HTTP/1.[0-9]\" " '{print $2}' filename | cut -d' ' -f 1 
+0

謝謝..這幫助我拉所有的http代碼。現在,我必須從每一行中提取值並寫出發送電子郵件的條件。讓我試着回去。 – user1746666

1

您可以使用grep -o 'HTTP/[0-9.]\+" [0-9]\+'來獲取HTTP中的部分,直到數字。空格之後是數字,因此只需添加| cut -f2 -d' '

1

(我假設你只是想郵寄出錯行,而不是整個日誌文件。)

如果之前的狀態代碼的空格數總是相同的,那麼你可以檢查第九場使用awk

#!/bin/bash 
# find-bad-lines 

# Match only statuses that do not start with 2 or 3 
# (i.e., 4xx and 5xx) 
awk '!match($9, /^[23]/)' 

那麼你一定要通過管道的find-bad-lines輸出來處理每個「壞」行成handle-bad-lines

#!/bin/bash 
# handle-bad-lines 

while read -r line 
do 
    # This is where you could execute a script for email 
    echo "$line" 
done 

它應該是這樣的:

$ find-bad-lines <logfile.log | handle-bad-lines 

很明顯,你會想添加錯誤處理和東西;但是,這是基本的想法。

+0

謝謝..但狀態碼之前的空格數並不總是相同的。將從第一個答案中使用awk代碼。 – user1746666

相關問題