Grep Регулярные выражения на нескольких строках - PullRequest
0 голосов
/ 11 марта 2009

Дорогие все, я пишу программу на Python, которая извлекает сообщения журнала edifact из файла .gz ... Пример 2 журналов:

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, которое совпадает с полем из последовательных строк ??

Заранее спасибо !!!

Ответы [ 2 ]

1 голос
/ 07 июля 2012

Проверьте эту предыдущую тему, вы можете получить ответ, который ищете: bash grep newline

См. Ответ pcregrep, pcregrep -M позволяет сопоставлять несколько строк.

0 голосов
/ 11 марта 2009

С одним 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';
    }
}

В awk это дает что-то вроде:

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

Я не на 100% уверен в точном синтаксисе. В основном это холст для иллюстрации принципов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...