2014-11-22 37 views
-2

我想從這個使用bash提取http狀態碼。請建議一個grep命令。grep命令爲網絡服務器日誌文件提取HTTP響應代碼

devel.example.com:80 199.4.27.122 - - [10/Oct/2012:04:45:09 -0400] "GET /wp-content/themes/cordobo-green-park-2/img/logo-cgp2.png HTTP/1.1" 200 1863 "http://devel.example.com/category/bit-lug/" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.92 Safari/537.4" 
+2

從您的結尾做出的任何努力? – 2014-11-22 08:14:25

回答

0

下面是做到這一點的一種方法:

awk -F "HTTP/1.?" '{split($2,a," ");print a[2]}' file 
200 

HTTP/1.1

+1

如果是公共服務器,那麼在日誌中可能會有'HTTP/1.0'客戶端。 – tripleee 2014-11-22 11:24:12

+0

@tripleee謝謝,修正。 – Jotne 2014-11-22 11:46:22

1

假設線是在一個名爲requests.log文件後,它會得到第一個號碼,所有行看起來像你描述,你可以使用這個命令:

sed -E 's|.*HTTP/1.1" ([0-9]+).*|\1|' requests.log 
+0

謝謝!有效 !! – 2014-11-23 07:57:34

+0

很高興聽到它。請隨時接受這個答案:) – Daniel 2014-11-23 09:02:15

0

我可能會做某些事ng like

$ cat input 
devel.example.com:80 199.4.27.122 - - [10/Oct/2012:04:45:09 -0400] "GET 
/wp-content/themes/cordobo-green-park-2/img/logo-cgp2.png HTTP/1.1" 200 
1863 "http://devel.example.com/category/bit-lug/" "Mozilla/5.0 (Windows 
NT 5.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.92 
Safari/537.4" 
$ grep -oP '(?<=HTTP\/1\.1"\s)\d+' input 
200