1

diffいくつかのファイルから入力を得ました。これらのファイルには、空の行で区切られた 4 行の情報ブロックが含まれており、1 ~ 3 行が異なる場合があります。

行自体には価値がないため、完全な情報ブロックを取得するには、異なる行の周りのコンテキストが必要なのでdiff、パラメーターを使用して呼び出します。-c3

このため、私の出力は非常に雑然として読みにくくなります。したがって、異なるブロックに属さないコンテキスト行を切り取る方法を探しています。

入力ファイルのサンプル:

Port-configuration of Switch "HP_e5412zl_secondary"
Timestamp: 20140206-161001

Interface:      A1
Description:    Uplink to primary switch
VLAN Untagged:  2
VLANs Tagged:   1 23 42 103 169

Interface:      A2
Description:    -- Not set --
VLAN Untagged:  30
VLANs Tagged:   

Interface:      A3
Description:    WS-198
VLAN Untagged:  1
VLANs Tagged:   

Interface:      A4
Description:    -- Not set --
VLAN Untagged:  30
VLANs Tagged:   

Interface:      A5
Description:    Printer finances
VLAN Untagged:  30
VLANs Tagged: 

私のシナリオを再現するには、これを使用して、いくつかのランダムな行を変更してください

2 つの異なるファイルで実行するdiff -c3と、次のような結果が得られます。

*** 2014-02-06/HP_e5412zl_secondary.txt   2014-02-06 16:14:38.024112434 +0100
--- 2014-02-05/HP_e5412zl_secondary.txt   2014-02-05 16:14:27.415741855 +0100
***************
*** 246,255 ****
  VLAN Untagged:        1
  VLANs Tagged:

  Interface:      A4
  Description:    -- Not set --
  VLAN Untagged:  30
  VLANs Tagged:   

  Interface:      A5
  Description:    Printer finances
--- 245,254 ----
  VLAN Untagged:        1
  VLANs Tagged:

  Interface:      A4
  Description:    WS-211
  VLAN Untagged:  1
  VLANs Tagged:   

  Interface:      A5
  Description:    Printer finances
***************
...

私は最善の sed トリックを試しましたが、必要な情報をコンテキストの乱雑さから分離できませんでした。目的の出力は次のようになります。

*** 2014-02-06/HP_e5412zl_secondary.txt   2014-02-06 16:14:38.024112434 +0100
--- 2014-02-05/HP_e5412zl_secondary.txt   2014-02-05 16:14:27.415741855 +0100
***************
*** 246,255 ****

  Interface:      A4
  Description:    -- Not set --
  VLAN Untagged:  30
  VLANs Tagged:   

--- 245,254 ----

  Interface:      A4
  Description:    WS-211
  VLAN Untagged:  1
  VLANs Tagged:   

***************
...

-> 行番号を含む行さえ必要ありませんが。シンプルなセパレーターで十分です。

私はこれを試しました:

diff -c3 file1 file2 | sed -n '/^[ ]*Inter.*/,/^[ ]*VLANs.*/p'

この:

diff -c3 file1 file2 | sed -e '/^[*-]{3,}.*/,/^$/d'

*また、との-文字をマスクしたり、 の 1 つだけを使用したりして実験しまし\*た。囲み括弧の有無にかかわらず、それらをマスクおよびマスク解除して使用しても、何も機能しませんでした。

ヘルプ?お願いします?

おまけの質問: diff の代わりに colordiff を使用してこれを行いたいと思います。それは難しさを増すでしょうか(カラーコードが埋め込まれているなどの理由で)?

4

1 に答える 1