Shell 多行Grep正则表达式

Shell 多行Grep正则表达式,shell,grep,Shell,Grep,亲爱的各位,我正在编写一个python程序,该程序正在从.gz文件检索edifact日志消息。。。 以下是两个日志的示例: 2009/03/02 12:13:59.642396 siamp102 mux1-30706 Trace name: MSG Message sent [con=251575 (APEOBEinMux1), len=2106, CorrID=000182C42DE0ED] UNB+IATB:1+1ASRPFA+1A0APE+090302:1213+0095JQOL2 20

亲爱的各位,我正在编写一个python程序,该程序正在从.gz文件检索edifact日志消息。。。 以下是两个日志的示例:

2009/03/02 12:13:59.642396 siamp102 mux1-30706 Trace name: MSG
Message sent [con=251575 (APEOBEinMux1), len=2106, CorrID=000182C42DE0ED]
UNB+IATB:1+1ASRPFA+1A0APE+090302:1213+0095JQOL2

2009/03/02 12:14:00.029496 siamp102 mux1-30706 Trace name: MSG
Message sent [con=737 (APIV2_1), len=22370, CorrID=000182C42DE0ED]
UNB+IATB:1+1ASIFQLFS+1ARIOFS+090302:1214+0122V11ON9
我想写一个正则表达式,能够匹配第一行的一些字段,第二行的一些字段,第三行的一些字段

是否有任何方法可以编写一个正则表达式,用于匹配连续行中的字段的GREP


提前感谢

仅凭
grep
,我认为这是不可能的。我建议使用
awk
perl
,以便能够保存前几行中的一些上下文

perl
中,这给出了如下内容:

#!/usr/bin/env perl

$isInLogSection = 'NO';
while (<>) {
    if ( /siamp102/ ) {
        # Start of log section: retrieve its ID
        $isInLogSection = 'YES';
        split;
        $logSectionID = $_[0];
    }

    if ($isInLogSection eq YES && /len=/) {
        # Retrieve value of len
        ...
    }

    if ( /^$/ ) {
        # End of log section
        $isInLogSection = 'NO';
    }
}
BEGIN { isInLogSection = "NO"; }
/siamp102/ { isInLogSection = "YES"; logSectionID = $1; }
/len=/ { if (isInLogSection == "YES") { #retrieve len value } }
/^$/ { isInLogSection = "NO" }

我不是100%确定确切的语法。这主要是一幅用于说明原理的画布。

检查前一条线索,您可能会得到您想要的答案:


请参阅
pcregrep
答案,
pcregrep-M
允许多行匹配。

Aargh,这个问题在Firefox 3.1b2中没有正确呈现。它是超宽的,向右边延伸很远,使整个页面都有一个水平滚动条。我注意到了。。。我将在Mac OS 10.5 intelNow上立即修改3.0.7中的文本“我的问题”更清楚。。。每个日志有3行,并由一个空行将其与下面的日志分开!我希望现在已经很清楚了,你能给我建议一下awk命令的语法吗?它可以选择第一行、第二行和第三行的元素形式?谢谢抱歉,当你添加你的评论时,我正在用一个perl示例编辑我的答案。。。