Sed技巧按日期提取日志

来自linux中国网wiki
Evan讨论 | 贡献2019年10月14日 (一) 13:55的版本 (导入1个版本)
跳到导航 跳到搜索

按日期提取日志

如何拿出 9点到  10点的日志 

日志格式如下  

2018-08-02 10:44:26,110  WARN [catalina-exec-4] (JSONObject.java:431) - Tried to assign property shopStatus:java.lang.String to bean of class com.xtwl.code.dispatch.orderDispatch.bean.rsp.OrderDispatchListRspBean
2018-08-02 10:44:26,110  WARN [catalina-exec-4] (JSONObject.java:431) - Tried to assign property shopStatus:java.lang.String to bean of class com.xtwl.code.dispatch.orderDispatch.bean.rsp.OrderDispatchListRspBean
2018-08-02 10:44:26,111  WARN [catalina-exec-4] (JSONObject.java:431) - Tried to assign property shopStatus:java.lang.String to bean of class com.xtwl.code.dispatch.orderDispatch.bean.rsp.OrderDispatchListRspBean
当然 中间可能还有些行是不规则的呢 

#找到开始行 n1
cat -n   log  | grep  '2018-08-02 09:00:*'  |head -n 2

#找到结束行 n2
cat -n   log  | grep  '2018-08-02 11:00:*'  |head -n 2 #这里记得 -1 

#打印   如果内容多  那就重定向到文件 吧 
sed  -n 'n1,n2p' log 

1

参考知识

在access.log中截取 16/Aug/2010:14:31:30到17/Aug/2010:10:12:07间的日志信息,并输出到log.txt中,我的思路,用sed打印16/Aug/2010:14:31:30和17/Aug/2010:10:12:07间的日志并>

n1=`grep -n '16\/Aug\/2010:14:31:30' access.log|head -1|cut -d ':' -f1`
n2=`grep -n '17\/Aug\/2010:10:12:07' access.log|tail -1|cut -d ':' -f 1`
sed -n "${n1},${n2}p" access.log >log.txt


使用p(rint)显示行: sed -n '2p' temp.txt   只显示第2行,使用选项n
打印范围:  sed -n '1,3p' temp.txt         打印第1行到第3行