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.