从DIFF输出(使用SED)中删除不需要的上下文线



我已经从 diff ing几个文件中输入了。这些文件包含4行长的信息块,被空行隔开,有时是1-3行会有所不同。

我用参数-c3调用diff,因为我需要上下文将不同的行以获取完整的信息块,因为该行本身毫无价值。

因此,我的输出真的很混乱,很难阅读。因此,我正在寻找一种切除不属于不同块的上下文线的方法。

输入文件的示例:

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: 

拒绝我的方案,请使用此情况,然后更改一些随机行

当我在两个不同的文件上运行 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'

我还通过掩盖*或仅使用其中之一来尝试*-字符。使用它们掩盖并在没有封闭括号的情况下掩盖并卸下 -

帮助吗?请?

奖励:我想用Colordiff而不是diff做到这一点。这会增强难度(由于嵌入式颜色代码或其他任何东西)吗?

如果可接受awk,则可以使用以下方式:

awk '/^[^! ]/ {p = 1; print;}  /^ *$/ {if (p++ % 2 == 0) print;}  (p % 2 == 0) { print; }'

说明:

  • 在任何差异元输出上,设置p=1并打印行
  • 在任何空白行上,将1添加到p。如果p均匀。
  • ,请打印行
  • 否则,如果p均匀。
  • ,打印行

这会产生您提供的所需输出。请注意,这不适合向后馈入DIFF(因为行号将需要更改),并且仍然包含所有差异元组,因为您说想要它。

请注意,我的差异将!作为更改线的第一个字符,因此我也将其作为非META输出。

如果您可以找到一种欺骗它以为您的管道可以显示颜色逃逸的方法,这可能与差异化。

相关内容

  • 没有找到相关文章

最新更新