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/

相关文章:

c - 跟踪由 gcc 编译的应用程序

python - paramiko 身份验证被拒绝,错误 877

java - 从 Java 中的 bash 脚本丢失数据

php - PHP中的通配符复制文件

linux - 运行差异并让它停止差异

Github 提交,diff 不显示更改

linux - 使用选项卡式输出在 Linux 上显示用户

bash - 如何创建带参数的 bash 别名?

Git 搜索所有差异

android - 无法 ping Android 设备