使用sed做日志时间的运算


使用sed做日志时间的运算
 
有网友遇到这样一个问题:日志的时间都记录错了,每条日志都慢了12个小时,所以想恢复每条日志的时间。当然用awk和python之类的更高级的语言会简单些。他的要求是使用sed,所以这里就给一个sed的解法。
 
日志样本:
    
1.1.1.1 20120523045959 /xxx/xxx.do?product=xxx&xxx=8.6 - "xxxx/1.6.0 (Linux; U; xxxx1.0.4; xxxBuild/xxx)"
sed代码:
 
sed -nr 'h;s#^([^ ]* )(.{8})(..)(..)(..)(.*)$#echo -n \1 $(date -d "\2 \3:\4:\5 12hours" +"%Y%m%d%H%M%S")#e;G;s/\n[^ ]* .{14}//p'
执行结果:
 
[root@station1 ~]# echo '1.1.1.1 20120523045959 /xxx/xxx.do?product=xxx&xxx=8.6 - "xxxx/1.6.0 (Linux; U; xxxx1.0.4; xxxBuild/xxx)"' | sed -nr 'h;s#^([^ ]* )(.{8})(..)(..)(..)(.*)$#echo -n \1 $(date -d "\2 \3:\4:\5 12hours" +"%Y%m%d%H%M%S")#e;G;s/\n[^ ]* .{14}//p'
1.1.1.1 20120523165959 /xxx/xxx.do?product=xxx&xxx=8.6 - "xxxx/1.6.0 (Linux; U; xxxx1.0.4; xxxBuild/xxx)"
 

相关内容

    暂无相关文章