我有一个包含几个开关和引导变量的文件。
lax1-sw0101#show boot
---------------------------
Switch 1
---------------------------
Current Boot Variables:
BOOT variable does not exist
Boot Variables on next reload:
BOOT variable does not exist
Manual Boot = no
Enable Break = no
Boot Mode = DEVICE
iPXE Timeout = 0
lax1-sw0101#
lgb1-sw0102#show boot
---------------------------
Switch 1
---------------------------
Current Boot Variables:
BOOT variable does not exist
Boot Variables on next reload:
BOOT variable does not exist
Manual Boot = no
Enable Break = no
Boot Mode = DEVICE
iPXE Timeout = 0
lgb1-sw0102#
las-sw0101#show boot
---------------------------
Switch 1
---------------------------
Current Boot Variables:
BOOT variable does not exist
Boot Variables on next reload:
BOOT variable = flash:/cat9k_iosxe.bin;
Manual Boot = no
Enable Break = no
Boot Mode = DEVICE
iPXE Timeout = 0
las-sw0101#
我只需要过滤具有“下次重新加载时启动变量:”作为“启动变量不存在”的开关,并打印主机名
Output:
lax1-sw0101#
Boot Variables on next reload:
BOOT variable does not exist
lgb1-sw0102#
Boot Variables on next reload:
BOOT variable does not exist
我尝试了一些 awk/sed 解决方案,例如行间打印,从第 n 行打印,我能达到的最接近的是类似于下面的那个,但我无法在下面打印一行
awk '/#/{a=$0}/Boot Variables on next reload/{print a"\n"$0}'
既然你知道你在找什么,我建议只用 awk 状态机打印相应的名称:
这只是使用一个标志值 ,
p
来指示我们是否先看到Boot Variables on next reload:
,然后再看到BOOT variable does not exist
;当我们看到行尾带有 a#
的行时,我们检查当前标志值;仅当值为 2 时,才打印该(主机名)行。无论如何,我们然后将状态重置回开始。如果您需要打印静态文本,这很容易添加到
print
语句中。