mail.log行の日付を印刷します。

mail.log行の日付を印刷します。

私はmail.log行を持っており、sedとパイプを使用して電子メールの件名、送信者、受信者を抽出できます。

echo "Jul 15 09:04:38 mail postfix/cleanup[36034]: 4A4E5600A5DE0: info: header Subject: The tittle of the message from localhost[127.0.0.1]; from=<sender01@mydomain> to=<recipient01@mydomain> proto=ESMTP helo=<mail.mydomain>" | sed -e 's/^.*Subject: //' -e 's/\]//' -e 's/from localhost//' -e 's/^.\];//' |sed -e 's/\[127.0.0.1; //' -e 's/proto=ESMTP helo=<mail.mydomain>//'

出力があります。

The tittle of the message from=<sender01@mydomain> to=<recipient01@mydomain>

私が望む出力は

Jul 15 09:04:38 The tittle of the message from=<sender01@mydomain> to=<recipient01@mydomain>

日付を抽出して出力に追加するにはどうすればよいですか?

ベストアンサー1

醜いですが、文の先頭に入れてくださいsed

 -e 's/^\([[:alpha:]]+ [[:digit:]]+ [[:digit:]]+:[[:digit:]]+:[[:digit:]]+\).*Subject:\(.*\)/\1\2/'

または、「mail postfix」がその場所のテキストに表示されることを常に知っている場合は、次のようにします。

 -e 's/^\(.*\) mail postfix.*Subject:\(.*\)/\1\2/'

そして他の変形も可能です。日付をキャプチャし、重要でない部分はスキップし、まだ処理する必要がある残りの部分を再キャプチャすることが重要です。サラウンドを使用してキャプチャし、\(キャプチャ\)を印刷するに\nは、nが特定のキャプチャの場所(最初のものは1、2番目は2など)を使用します。

これがわかったので、すべての個々のディレクティブ(-e)を削除し、複数のキャプチャグループを使用して単一のsed式に減らす方法を理解できます。

おすすめ記事