Se a entrada é processada linha por linha, então o processamento precisa ser assim:
- se a linha atual for
foo.bar, armazene-a, esquecendo qualquer linhafoo.baranterior que não tenha sido ativada para saída; - se a linha atual for
relevant=yes, isso ativará a últimafoo.barpara saída.
Esse tipo de raciocínio é um trabalho para o awk. (Também pode ser feito em sed se você gosta de dor.)
awk '
/^foo\.bar/ { foobar = $0 }
/^relevant=yes$/ {if (foobar != "") {print foobar; foobar = ""}}
'