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

标签 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

如果第三行“network-object object 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

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

最佳答案

让我为您草拟一个基于通用 Unix 工具的解决方案。

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

关于linux - diff:根据缩进显示整个部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36864822/

相关文章:

node.js - 使用 npm 安装的数据包不会走向全局

linux - 当我通过 SSH 在远程计算机上运行 bash 脚本时,如何在本地计算机上发出声音?

c++ - Visual C++ 2010 : deterministic build? 如何区分 exe/dll 文件?

Linux:修复文件的输出内容

c - 使用 EVIOCSMASK 过滤键码

linux - Bash 中的输出格式

parsing - Diff 文件语法是什么

android - 比较两个 apk 文件以检查两者之间的差异(大小差异为 1 kb)

linux - 在 linux 命令行中替换大文件第一行中字符串的最快方法?

linux - 使用 SED 进行字符串替换