いくつかのログファイルを解析し、エラーを探しています。各行は次のようになります。
CreateOrder_hostname1.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_CreateOrder: [1443555726715] Error description [system]: Method1
ScheduleOrder_hostname2.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_ScheduleOrder: [1443555726715] Error description 2 [system]: Method2
ScheduleOrder_hostname2.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_ScheduleOrder: [1443555726715] Error description 3 [system]: Method3
ShipOrder_hostname3.domain.com_201509291530_tee.log:2015-09-29 15:42:06,715:ERROR :Thread-26_ShipOrder: [1443555726715] Error description 4 [system]: Method4
この行をどのようにして読むことができますか?
CreateOrder: 2015-09-29 15:42:06: Error description
ScheduleOrder: 2015-09-29 15:42:06: Error description 2
ScheduleOrder: 2015-09-29 15:42:06: Error description 3
ShipOrder: 2015-09-29 15:42:06: Error description 4
ベストアンサー1
そしてsed
:
sed 's/^\([^_]*\)_[^:]*:\([^,]*\)[^]]*\]\([^[]*\).*/\1: \2:\3/'
^\([^_]*\)
行の先頭に一致します^
。その後、括弧内の部分は\(...\)
sed内部変数に保存されます\1
。[^_]*
_
下線が0回以上でないすべての文字と一致します*
。
[^:]*
その後は、すべての文字以外の文字が続きます:
。\([^,]*\)
括弧内に戻し、日付以降のすべての文字\2
まで変数に保存します。,
[^]]*\]
]
解析は、エラーが発生するまで(エラーの説明前)続行されます。\([^[]*\)
それからすべてを次の開いた角[
かっこに合わせます\3
。\1: \2:\3
\1
今、すべてをフォーマットされた出力と\2
変数の値に置き換えます\3
。
出力:
CreateOrder: 2015-09-29 15:42:06: Error description
ScheduleOrder: 2015-09-29 15:42:06: Error description 2
ScheduleOrder: 2015-09-29 15:42:06: Error description 3
ShipOrder: 2015-09-29 15:42:06: Error description 4