Aqui está uma maneira de fazer isso com sed
:
sed '/PATTERN1/,$!d;/PATTERN2/{x;//{x;q;};g;}' infile
Isso exclui todas as linhas (se houver) até a primeira ocorrência de PATTERN1
e, em seguida, em cada linha que corresponde a PATTERN2
it e x
altera os buffers. Se o novo espaço de padrão também coincidir, isso significa que é a segunda ocorrência, portanto, e x
é alterado novamente e q
uits (após a impressão automática). Se não corresponder, significa que é a primeira ocorrência, copiando o conteúdo do espaço suspenso sobre o espaço padrão por meio de g
(agora há uma linha correspondente a PATTERN2
no buffer retido) e continua ...
e outra maneira com awk
:
awk '/PATTERN1/{t=1}; t==1{print; if (/PATTERN2/){c++}}; c==2{exit}' infile
Ele começa a imprimir e contar as linhas que correspondem a PATTERN2
somente quando encontra uma linha correspondente a PATTERN1
e sai quando c
ounter atinge 2
.