免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3027 | 回复: 18

【已解决】匹配“new msg ID”与“end msg ID”之间的所有行? [复制链接]

论坛徽章:
0
发表于 2010-04-07 16:55 |显示全部楼层
本帖最后由 busyant 于 2010-04-07 17:23 编辑

需求逻辑比较简单,就是对mail 日志的处理,举例如下:
文件 maillog 内有如下内容
new msg 1883202
info msg 1883202: bytes 61819 from <dengzt@mydomain.com> qp 31166 uid 507
starting delivery 5110891: msg 1883202 to remote changxin@remote.com
status: local 0/50 remote 1/120
delivery 5110891: success: 161.22.23.XX_accepted_message./Remote_host_said:_250_ok_1270615371_qp_23648/
status: local 0/50 remote 0/120
end msg 1883202

红色部分是ID,为手工指定。
需要输出特定ID的 new msg 和 end msg 之间的所有行,注意,因为服务器比较繁忙,可能会有6行,也可能会有上百行。
想了很久没弄出来,哪位大哥帮帮忙?

论坛徽章:
0
发表于 2010-04-07 16:58 |显示全部楼层
sed -n '/new msg 1883202/,/end msg 1883202/p'

论坛徽章:
0
发表于 2010-04-07 17:08 |显示全部楼层
  1. awk '/new msg 1883202/,/end msg 1883202/' FILE
复制代码

论坛徽章:
0
发表于 2010-04-07 17:12 |显示全部楼层
回复 2# iori809


谢谢这么快就回复,上面没完全说清楚
在maillog里面,这个ID是可以重复使用的,如下:
Apr  7 12:42:49 some other output lines
Apr  7 12:42:49 some other output lines
Apr  7 12:42:49 new msg 1883202
Apr  7 12:42:49 info msg 1883202: bytes 61819 from <dengzt@mydomain.com> qp 31166
Apr  7 12:42:49 starting delivery 5110891: msg 1883202 to remote changxin@remote.com
Apr  7 12:42:49 status: local 0/50 remote 1/120
Apr  7 12:42:49 delivery 5110891: success: 161.22.23.XX_accepted_message./Remote_host_s
Apr  7 12:42:49 status: local 0/50 remote 0/120
Apr  7 12:42:49 end msg 1883202
Apr  7 12:44:50 some other output lines
Apr  7 12:44:50 some other output lines
Apr  7 12:44:50 new msg 1883202
Apr  7 12:44:50 info msg 1883202: bytes 62267 from <dengtiezhu@mydomain.com> qp 31177
Apr  7 12:44:50 starting delivery 5110892: msg 1883202 to local mydomain.com-changxin
Apr  7 12:44:50 status: local 1/50 remote 0/120
Apr  7 12:44:50 delivery 5110892: success: did_0+0+1/
Apr  7 12:44:50 status: local 0/50 remote 0/120
Apr  7 12:44:50 end msg 1883202
Apr  7 12:44:50 some other output lines
Apr  7 12:44:50 some other output lines


也就是说,仅需从 new msg ID 开始,匹配到第一个 end msg ID 就可以了。谢谢!

论坛徽章:
0
发表于 2010-04-07 17:15 |显示全部楼层
回复 4# busyant


    那就是2楼的咯!

论坛徽章:
0
发表于 2010-04-07 17:17 |显示全部楼层
sed -n '1,/end msg 1883202/{/new msg 1883202/,/end msg 1883202/p}'

论坛徽章:
0
发表于 2010-04-07 17:17 |显示全部楼层
回复 5# 709101040516

可是二楼兄弟的命令,也会匹配出全部的。

论坛徽章:
0
发表于 2010-04-07 17:20 |显示全部楼层
回复 7# busyant


    额!那是理解错了。

论坛徽章:
0
发表于 2010-04-07 17:22 |显示全部楼层
试试6楼那个

论坛徽章:
0
发表于 2010-04-07 17:23 |显示全部楼层
sed -n '1,/end msg 1883202/{/new msg 1883202/,/end msg 1883202/p}'
iori809 发表于 2010-04-07 17:17



这个很妙!sed 真是个 瑞士军刀!!!
拜谢iori809兄!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP