我有以下日志:
File Process Start : 2014-03-12 - 10:43:40 UnZipping File : fetch_export?id=t63184&file=4 Extracted File : exp_4.mbx Expected Messages : 6236 File Process Start : 2014-03-12 - 10:57:38 UnZipping File : fetch_export?id=t63185&file=39 Extracted File : Expected Messages : 0 File Process Start : 2014-03-12 - 10:57:38 UnZipping File : fetch_export?id=t63185&file=33 Extracted File : Expected Messages : 0 File Process Start : 2014-03-12 - 10:57:38 UnZipping File : fetch_export?id=sept2012&file=61 Extracted File : exp_61.mbx Expected Messages : 7935
我需要在此命令中更改什么?
sed -n '/File Process Start/,/Expected Messages/p'
我只需要在
之间输出File Process Start ... Expected Messages : 0
像这样:
File Process Start : 2014-03-12 - 10:57:38 UnZipping File : fetch_export?id=t63185&file=39 Extracted File : Expected Messages : 0 File Process Start : 2014-03-12 - 10:57:38 UnZipping File : fetch_export?id=t63185&file=33 Extracted File : Expected Messages : 0
答案 0 :(得分:2)
我们的想法是在" 文件处理开始... "之间打印线条。和" 预期消息:0 "。问题是您事先不知道是否会找到" 预期消息:0 "或" 预期消息:X "。因此,从" 文件处理开始"开始,继续将行保存在保留空间中,直到您能够决定是打印它们还是丢弃它们。
sed -n '/Expected Messages : 0/{H;g;p};/.*/H;/File Process Start/h' log.txt
伪代码是:
如果该行包含" 预期消息:0 ",( h )会将此行添加到保留空间(此处点,保持空间将有行" 文件处理开始... "," 解压文件... &#34 ;和" 提取文件... "),( g )从保留空间获取内容到模式空间(即来自" 文件处理开始... "直到您刚刚附加的最后一个),( p )打印图案空间的内容。
如果该行包含其他内容,( H )会将其附加到保留空间。
如果该行包含" 文件处理开始",( h )清除保留空间中的内容并把这条新线放在那里。
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed -n '/File Process Start/{h;d};H;/Expected Messages : 0/{g;p}' file