2017-06-13 15 views
0

postfixログからメッセージIDを抽出するスクリプトを作成していますが、ログに異なる日付スタンプが含まれている可能性があります。したがって、フィールド数が異なる可能性があります。したがって、メッセージIDフィールドである 'print $ 6'いつも動かないし、SEDで聞いたことも速いです。SeDとPostfixログ

は、だから私は、ログの各行から必要なデータのみであり、ID:

7B01038BFDB

cat mail.log | grep 'postfix' | grep -i [email protected] | sed -n 's/.*[0-9A-Z]{11}:*/\1/p' 

しかし、この正規表現は動作しません。

+0

ログファイルの断片を投稿する必要があります。 – RomanPerekhrest

答えて

1

あなたは後方参照を使用するには

sed 's/.*\([0-9A-Z]\{11\}\):.*/\1/' 
      ^^  ^^ ^^^^ ^^ 

にごsedパターンを調整する必要があり、あなたは\(...\)でキャプチャグループを定義する必要があり、範囲の数量詞もBRE POSIXにエスケープする必要があります。また、残りの行と一致するようにパターンは.*で終わる必要があります。

+0

こんにちは、それはうまくいきますが、idが存在しないところで迷惑行が表示されます。例えば、 'echo" aaaaaaaa "| IDが存在しない場合、結果は望んでいません(IDは存在しません)。sedの/.*/([0-9A-Z] \ {11 \} \):。*/\ 1/'は結果 - > aaaaaaaa 。 – munin24

+0

@ munin24それで 'grep '[0-9A-Z] \ {11 \}:''でパターンを含む行を 'grep'します。 –

関連する問題