Como imprimir uma linha abaixo do RegEx correspondente no AWK ou SED

Como imprimir uma linha abaixo do RegEx correspondente no AWK ou SED

Eu tenho um arquivo contendo várias opções e variáveis ​​de inicialização.

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#

Preciso filtrar apenas as opções que possuem as "Variáveis ​​de inicialização na próxima recarga:" como "Variáveis ​​de inicialização não existem" e também imprimir o nome do host

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

Eu tentei algumas soluções awk/sed, como imprimir entre linhas, imprimir a partir da enésima linha, o mais próximo que posso chegar é o semelhante abaixo, mas não consigo imprimir uma linha abaixo

awk '/#/{a=$0}/Boot Variables on next reload/{print a"\n"$0}'

Responder1

Como você sabe o que está procurando, sugiro apenas imprimir os nomes correspondentes com uma máquina de estado awk:

awk '/^Boot Variables on next reload:$/ { p=1 } 
     /^BOOT variable does not exist$/ && 1==p { p=2 } 
     /#$/ { if (2 == p) print; p=0; }' 
  input

Isso apenas usa um valor de sinalizador, ppara indicar se vimos pela primeira vez Boot Variables on next reload:,entãovisto BOOT variable does not exist; quando vemos uma linha com a #no final da linha, verificamos o valor do sinalizador atual; somente se o valor for 2, imprima essa linha (nome do host). Independentemente disso, redefinimos o estado de volta ao início.

Se você precisar imprimir o texto estático, será uma adição fácil à printinstrução.

informação relacionada