我有一组文件,其中包含网络中多个思科交换机的引导变量。我需要在下次重新加载时仅过滤引导变量为空的交换机并打印主机名
given this data
hostname1#show boot
---------------------------
Switch 1
---------------------------
Current Boot Variables:
BOOT variable = flash:cat9k_iosxe.bin;
Boot Variables on next reload:
BOOT variable =
Manual Boot = no
Enable Break = no
Boot Mode = DEVICE
iPXE Timeout = 0
hostname2#show boot
---------------------------
Switch 1
---------------------------
Current Boot Variables:
BOOT variable = flash:cat9k_iosxe.bin;
Boot Variables on next reload:
BOOT variable = flash:cat9k_iosxe.bin;
Manual Boot = no
Enable Break = no
Boot Mode = DEVICE
iPXE Timeout = 0
desired result
hostname1
BOOT variable =
谢谢!
答案1
你可以做类似的事情
awk -F'#' '
$2 == "show boot" {hostname = $1}
/BOOT variable =[ \t]*$/ {print hostname; print}
' file
答案2
awk '{a[++i]=$0}/BOOT variable =.$/{for(x=NR-10;x<=NR;x++)print a[x]}' filename|awk '/^hostname/||/BOOT variable =.$/{print $0}'| sed "s/#.*//g"
结果是:
hostname1
BOOT variable =
答案3
使用 grep 和管道:
grep -B8 -E '= $' file |grep -E 'hostname|= $'
第一个 grep 提取“=”符号后面没有任何内容的行以及匹配项之前的 8 行,以提取包含主机名的行。第二个 grep 过滤行主机名和引导变量 =