sed -n '/foo/{:a;N;/^\n/s/^\n//;/bar/{p;s/.*//;};ba};'
O padrão de sed correspondente a /first/,/second/
lê as linhas uma por uma. Quando alguma linha corresponde a /first/
, ela se lembra e aguarda a primeira correspondência para o padrão /second/
. Ao mesmo tempo, aplica todas as atividades especificadas para esse padrão. Depois desse processo começa de novo e de novo até o final do arquivo.
Isso não é o que precisamos. Precisamos olhar para a última correspondência do padrão /second/
. Portanto, construímos uma construção que parece apenas pela primeira entrada /foo/
. Quando encontrado, o ciclo a
é iniciado. Adicionamos uma nova linha ao buffer de correspondência com N
e verificamos se ela corresponde ao padrão /bar/
. Se isso acontecer, basta imprimi-lo e limpar o buffer de correspondência e o janyway jump para o início do ciclo com ba
.
Também precisamos excluir o símbolo de nova linha após a limpeza do buffer com /^\n/s/^\n//
. Tenho certeza de que há uma solução muito melhor, infelizmente não veio à minha mente.
Espero que tudo esteja claro.