diff:根据缩进显示整个部分
diff: show entire section based on indentation
我正在使用 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
如有任何帮助,我们将不胜感激!如果此 example/question 不够清楚,请告诉我。
让我为您描绘一个基于通用 Unix 工具的解决方案。
- 首先用sed处理文件,将两个文件的缩进行折叠成一行。用控制字符替换前导空格。为此,您将使用 sed 的
{
、H
、s
和 p
命令。
- 然后运行 diff在两个折叠的文件上,指定处理一个二进制文件就可以了。
- 最后,运行 sed 在 diff 的输出上通过用 [= 替换控制字符来展开输出19=]diff 的前导字符(例如
<
或 >
)、换行符和缩进。这里 sed 的 s
命令应该就是您所需要的。
我正在使用 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
如有任何帮助,我们将不胜感激!如果此 example/question 不够清楚,请告诉我。
让我为您描绘一个基于通用 Unix 工具的解决方案。
- 首先用sed处理文件,将两个文件的缩进行折叠成一行。用控制字符替换前导空格。为此,您将使用 sed 的
{
、H
、s
和p
命令。 - 然后运行 diff在两个折叠的文件上,指定处理一个二进制文件就可以了。
- 最后,运行 sed 在 diff 的输出上通过用 [= 替换控制字符来展开输出19=]diff 的前导字符(例如
<
或>
)、换行符和缩进。这里 sed 的s
命令应该就是您所需要的。