
Ich habe eine Datei, die mehrere Schalter und die Bootvariablen enthält.
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#
Ich muss nur die Switches filtern, die die "Boot-Variablen beim nächsten Neuladen:" als "Boot-Variablen existieren nicht" haben, und auch den Hostnamen drucken
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
ich habe einige awk/sed-Lösungen ausprobiert, wie z. B. Drucken zwischen Zeilen, Drucken ab der n-ten Zeile, am nächsten komme ich mit der folgenden Lösung, aber ich kann nicht eine Zeile darunter drucken
awk '/#/{a=$0}/Boot Variables on next reload/{print a"\n"$0}'
Antwort1
Da Sie wissen, wonach Sie suchen, würde ich vorschlagen, einfach die entsprechenden Namen mit einer Awk-Zustandsmaschine auszudrucken:
awk '/^Boot Variables on next reload:$/ { p=1 }
/^BOOT variable does not exist$/ && 1==p { p=2 }
/#$/ { if (2 == p) print; p=0; }'
input
Dies verwendet nur einen Flag-Wert, p
, um anzuzeigen, ob wir zum ersten Mal gesehen haben Boot Variables on next reload:
,Danngesehen BOOT variable does not exist
; wenn wir eine Zeile mit einem #
am Zeilenende sehen, prüfen wir den aktuellen Flag-Wert; nur wenn der Wert 2 ist, drucken wir diese (Hostname)-Zeile. Unabhängig davon setzen wir den Status dann auf den Anfang zurück.
Wenn Sie den statischen Text drucken müssen, können Sie ihn ganz einfach der print
Anweisung hinzufügen.