So drucken Sie eine Zeile unter dem passenden RegEx in AWK oder SED

So drucken Sie eine Zeile unter dem passenden RegEx in AWK oder SED

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 printAnweisung hinzufügen.

verwandte Informationen