新しい文字列を形成するために文字列の一部をgrep

新しい文字列を形成するために文字列の一部をgrep

いくつかのログファイルを解析し、エラーを探しています。各行は次のようになります。

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 

おすすめ記事