diff:根据缩进显示整个部分

时间:2016-04-26 12:22:24

标签: linux bash diff gnu

我正在使用GNU diff实用程序来识别配置文件的更改(目前我们只关注Cisco ASA和IOS设备)。我需要能够根据缩进级别识别配置组的更改。

例如,采取以下配置:

object-group network DM_INLINE_NETWORK_3
 network-object object Hyrule-DC02
 network-object object Hyrule-DC03

如果第三行“网络对象对象Hyrule-DC02”被删除,那么我想打印整个配置组,从第一行开始,没有缩进,直到最后一行有缩进。在这个例子中,我想要打印的行是:

object-group network DM_INLINE_NETWORK_3
 network-object object Hyrule-DC03

以下是代码结构的示例。在整个配置中使用这种按缩进分组的方式:

object-group network DM_INLINE_NETWORK_2
 network-object object Hyrule-NS01-MGMT
 network-object object Hyrule-NS01-VIP1
object-group network DM_INLINE_NETWORK_3
 network-object object Hyrule-DC02
 network-object object Hyrule-DC03

任何帮助将不胜感激!如果这个例子/问题不够明确,请告诉我。

1 个答案:

答案 0 :(得分:0)

让我为您绘制一个基于常见Unix工具的解决方案。

  • 首先使用 sed 处理文件,将两个文件的缩进行折叠成一行。用控制字符替换前导空格。为此,您将使用 sed {Hsp命令。
  • 然后在两个折叠的文件上运行 diff ,指定可以处理二进制文件。
  • 最后,在 diff 的输出上运行 sed ,通过将控制字符替换为 diff 的引导来展开输出字符(例如<>),换行符和缩进。这里 sed s命令应该就是您所需要的。