如何将sed模式与以下内容匹配:

如何将sed模式与以下内容匹配:,sed,Sed,我有以下日志: 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 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 文件处理开始:2014-03-12-10:43:40 解压缩文件:fetch_export?id=t63184&File=4 解压缩文件:exp_4.mbx 预期信息:6236 文件处理开始:2014-03-12-10:57:38 解压缩文件:fetch_export?id=t63185&File=39 提取的文件: 预期的邮件:0 文件处理开始:2014-03-12-10:57:38 解压缩文件:fetch_export?id=t63185&File=33 提取的文件: 预期的邮件:0 文件处理开始:2014-03-12-10:57:38 解压缩文件:fetch_export?id=sept2012&File=61 解压缩文件:exp_61.mbx 预期留言:7935 我需要在这个命令中更改什么

sed -n '/File Process Start/,/Expected Messages/p' sed-n'/File Process Start/,/Expected Messages/p' 我只需要两个输出之间

File Process Start ... Expected Messages : 0 文件进程启动 ... 预期的邮件: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 文件处理开始:2014-03-12-10:57:38 解压缩文件:fetch_export?id=t63185&File=39 提取的文件: 预期的邮件:0 文件处理开始:2014-03-12-10:57:38 解压缩文件:fetch_export?id=t63185&File=33 提取的文件:
预期消息:0这个想法是打印“文件进程开始…”和“预期消息:0”之间的行。问题是,您事先不知道是否会找到“预期消息:0”或“预期消息:X”。因此,从“文件处理开始”开始,继续将行保存在保留空间中,直到您能够决定是打印行还是丢弃行

sed -n '/Expected Messages : 0/{H;g;p};/.*/H;/File Process Start/h' log.txt
伪代码是:

  • 如果该行包含“预期消息:0”,(h)将该行附加到保留空间中(此时,保留空间将有“文件处理开始…”、“解压缩文件…”和“提取文件…”行),(g)将内容从保留空间中获取到模式空间(即,从“文件处理开始…”直到您刚才添加的最后一个文件),(p)打印模式空间的内容

  • 如果该行包含任何其他内容,(H)将其附加到保留空间

  • 如果该行包含“文件处理开始”(h)清除保留空间中的内容,并将新行放在那里

这可能适合您(GNU-sed):


你有任何条件/检查得到这个输出吗?太好了!你能解释一下吗?
sed -n '/File Process Start/{h;d};H;/Expected Messages : 0/{g;p}' file