2009-03-11 5 views
0

各位に対してgrepの正規表現-すべて、私は.gzをファイルからEDIFACTログメッセージを取得しているPythonのプログラムを書いています... 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 

最初の行からいくつかのフィールドに一致する正規表現を書いてみたいと思います。第2行からいくつか、第3行からいくつかを一致させることができます。

GREPで使用する正規表現を書く方法はありますか?連続する行のフィールドに一致しますか?

ありがとうございます!!!

+0

Firefox 3.1b2ではこの質問は正しく表示されません。ウルトラワイドで、右に広がり、ページ全体が水平スクロールバーになります。 – unwind

+0

私はそれを気づいた...私はすぐにテキストを変更します – wheisenberg

+0

Mac OS 10.5の上の3.0.7で同じ問題が発生しました – dmckee

答えて

0

grepだけでは、これはできないと思います。前の行からいくつかのコンテキストを保存できるようにするには、awkまたはperlを提案します。

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

私は正確な構文の特定のない100%午前:awk

#!/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'; 
    } 
} 

はこのような何かを与える:

perlではこのようなものを提供します。これは主に原理を説明するキャンバスです。

+0

awkコマンドの構文を教えてください。最初、2番目、3番目の要素フォームを選択できますか?ありがとう – wheisenberg

+0

おっと、申し訳ありませんが、あなたのコメントを追加したときに、私の回答をperlの例で編集していました... – mouviciel

+0

awkのバージョンが追加されました。 – mouviciel

1

チェックこの前のスレッドを、あなたが探している答えかもしれません:bash grep newline

pcregrep -Mは、複数の行が一致することを可能にするpcregrep答えを、参照してください。

関連する問題