当前位置: > Linux命令 >

sed截取指定日期时间段内的apache日志

时间:2014-12-19 13:59来源:linux.it.net.cn 作者:IT
sed命令截取apache访问日志的方法,在截取前找到日志起始点和结束点,然后用sed命令参数与正则匹配截取apache日志文件。

要求导出:
2013-05-24 15:00:00 ~ 2013-05-28 16:00:00 之间的apache访问日志

apache日志格式:
 

222.92.115.194 - - [28/May/2013:17:01:00 +0800] "GET /media/js/jquery.eislideshow.js HTTP/1.1" 304 -
222.92.115.194 - - [28/May/2013:17:01:00 +0800] "GET /media/style/tpl/tpl_buy_left/tpl_buy_left.js HTTP/1.1" 304 -
222.92.115.194 - - [28/May/2013:17:01:01 +0800] "GET /favicon.ico HTTP/1.1" 404 17846
222.92.115.194 - - [28/May/2013:17:01:01 +0800] "GET /large-display/interactive/ HTTP/1.1" 200 21382
222.92.115.194 - - [28/May/2013:17:01:02 +0800] "GET /favicon.ico HTTP/1.1" 404 17846
222.92.115.194 - - [28/May/2013:17:01:04 +0800] "GET /large-display/single/ HTTP/1.1" 200 21386
222.92.115.194 - - [28/May/2013:17:01:04 +0800] "GET /favicon.ico HTTP/1.1" 404 17846
222.92.115.195 - - [28/May/2013:17:01:05 +0800] "GET /dsc/ HTTP/1.1" 200 34530
222.92.115.195 - - [28/May/2013:17:01:05 +0800] "GET /media/img/channel_icon.jpg HTTP/1.1" 404 17846
222.92.115.195 - - [28/May/2013:17:01:06 +0800] "GET /favicon.ico HTTP/1.1" 404 17846

截取命令:
 

[root@it logs]# sed -n '/24\/May\/2013:15:00:01/,/28\/May\/2013:16:59:58/p' xxxx-access_log > 20130524.15-20130528.16-access_log.txt

注意,如果起始时间在日志中不存在,则整个截取将返回 0 行结果。
而如果结束时间在日志中不存在,则会截取到日志的最后一条。

因此,在截取前要找到日志中最合适的起始点和结束点。

先使用grep去找到两个点,再使用sed去截取:
 

# 找出 2013-05-24 15点第一条记录的时间
[root@it logs]# grep '24/May/2013:15' xxxx-access_log | head -1
10.200.114.183 - - [24/May/2013:15:00:01 +0800] "GET /gp10/pic_259_218_1368781965.png HTTP/1.0" 401 484
# 找出 2013-05-28 16点最后一条记录的时间
[root@it logs]# grep '28/May/2013:16' xxxx-access_log | tail -1
222.92.115.195 - - [28/May/2013:16:59:58 +0800] "GET /favicon.ico HTTP/1.1" 404 17846
# 然后取这两个时间段之间的记录



(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容