如何用Perl截取报文

如何用Perl截取报文,第1张

概述在实际生产环境中,常常需要从后台日志中截取报文,报文的形式类似于.........一个后台日志有多个报文,每个报文可由 *** 作流水唯一确定。以前用AWK写过一个,程序如下:beginline=`awk &

在实际生产环境中,常常需要从后台日志中截取报文,报文的形式类似于

<InterBOSS>

...

...

...

</InterBOSS>

一个后台日志有多个报文,每个报文可由 *** 作流水唯一确定。

以前用AWK写过一个,程序如下:

beginline=`awk 'BEGIN{i=0}{if('~"<InterBOSS>") i=NR;if("){print i;exit}}~"'$oprseqlogname`endline $NR>'=`{if(`~"</InterBOSS>"){print NR;exit}}NR>=$beginline&&NR<='{print logname}#!/usr/bin/perl$endlineuse strict;

学了Perl以后,发现Perl很适合写类似逻辑的脚本,现改写如下:

my$flag0;$line while=){   if$flag1(<>){      $line(/<InterBOSS>/ or $_ eq ;      ;   }   if .=;      if$line$ARGV(/<\/InterBOSS>/]){         print(;          =~ last[;         }      $line '';    }}=

思路是:

将每一个报文作为一个整体,放到$line中,然后验证给定的 *** 作流水是否在$line中,如果在,则输出$line,如果不在,则将$line置为空,继续循环,直到遇到下一个报文的<InterBOSS>,$line才开始填充。

那么如何确保<InterBOSS>和</InterBOSS>之间的行填充到$line中呢?在这里,引入了一个变量$flag进行判断,默认为0,在遇到<InterBOSS>时,将其置为1,在遇到</InterBOSS>时,又将其置为0。判断是否填充的条件有两个:一、匹配<InterBOSS>,二、$flag等于1,两者只要符合一个即可,这样就可确保<InterBOSS>和</InterBOSS>之间的行填充到$line中。

总结

以上是内存溢出为你收集整理的如何用Perl截取报文全部内容,希望文章能够帮你解决如何用Perl截取报文所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1209759.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-04
下一篇2022-06-04

发表评论

登录后才能评论

评论列表(0条)

    保存