興味のある他のパターンの直前の行のパターンを置き換えます。

興味のある他のパターンの直前の行のパターンを置き換えます。

次のステートメントの多くのインスタンスを含むログファイルがあります。

14 Aug 19 16:30:11.506: <DATA>  |POS|IDLE|1|01131844090|5950|$hostIp|$size  |$data
20 Aug 19 16:30:12.439: <DATA>  |POS|IDLE|1|01131844090|5950|$hostIp|$size  |$data
21 ###############################################################################

IDLEさっき#########..お話した内容を置き換えENDて別の状況を維持したいと思いますIDLE

どのように実装できますか?

編集:実際のファイルと異なる場合があります。この質問に対する答えは目標には及ばない。詳細な抜粋と要件は次のとおりです。

  22 Aug 19 16:47:33.159: <DATA>  |POS|RINGING|1|1126710938|5950|$hostIp|$size  |$data
    23 Aug 19 16:47:33.453: <DATA>  |POS|INIT|1|1126710938|5950|$hostIp|$size  |$data
    24 Aug 19 16:47:33.484: <DATA>  |POS|TRAINING|1|1126710938|5950|$hostIp|$size  |$data
    25 Aug 19 16:48:05.824: <DATA>  |POS|IDLE|1|1126710938|5950|$hostIp|$size  |$data
    26 Aug 19 16:48:05.916: <DATA>  |POS|INIT|1|1126710938|5950|$hostIp|$size  |$data
    27 Aug 19 16:48:05.947: <DATA>  |POS|IDLE|1|1126710938|5950|$hostIp|$size  |$data
    28 Aug 19 16:48:23.792: <DATA>  |POS|IDLE|1|1126710938|5950|$hostIp|$size  |$data
    29 Aug 19 16:48:23.853: <DATA>  |POS|INIT|1|1126710938|5950|$hostIp|$size  |$data
    30 Aug 19 16:48:23.884: <DATA>  |POS|IDLE|1|1126710938|5950|$hostIp|$size  |$data
    31 ##############################################################################

上記のインスタンスで操作を実行した後、結果は次のようになります。 (IDLE####の行はに変更されますEND。このタイプのイベントインスタンスがたくさんあることに注意してください。実際に必要なのは、RINGING2つのインスタンス間の時間差を見つけることです。IDLE - aka END)

22 Aug 19 16:47:33.159: <DATA>  |POS|RINGING|1|1126710938|5950|$hostIp|$size  |$data
23 Aug 19 16:47:33.453: <DATA>  |POS|INIT|1|1126710938|5950|$hostIp|$size  |$data
24 Aug 19 16:47:33.484: <DATA>  |POS|TRAINING|1|1126710938|5950|$hostIp|$size  |$data
25 Aug 19 16:48:05.824: <DATA>  |POS|IDLE|1|1126710938|5950|$hostIp|$size  |$data
26 Aug 19 16:48:05.916: <DATA>  |POS|INIT|1|1126710938|5950|$hostIp|$size  |$data
27 Aug 19 16:48:05.947: <DATA>  |POS|IDLE|1|1126710938|5950|$hostIp|$size  |$data
28 Aug 19 16:48:23.792: <DATA>  |POS|IDLE|1|1126710938|5950|$hostIp|$size  |$data
29 Aug 19 16:48:23.853: <DATA>  |POS|INIT|1|1126710938|5950|$hostIp|$size  |$data
30 Aug 19 16:48:23.884: <DATA>  |POS|END|1|1126710938|5950|$hostIp|$size  |$data
31 ##############################################################################

ベストアンサー1

修正する:exコマンドモードは、一致する最初の行にのみ有効です。 Perlの例では、すべての行をパターンに置き換えますが、元のファイルを編集せずに出力のみを提供するため、出力を新しいファイルにリダイレクトする必要があります。 YOUR-LOGFILEは、変更したいファイルの場所に置き換える必要があります。

perl -0pe 's/IDLE(.*\n.*###)/END\1/g' ログファイル > 新しいファイル

これにより、パターンを含む行の上の行が変わり、終了します。

ex -s +'/######/-1 s/idle/end/ x' ログファイル

おすすめ記事