Se você tiver um arquivo razoavelmente curto, grep
sozinho poderá funcionar:
grep -A5000 -m1 -e 'dog 123 4335' animals.txt
5000 é apenas o meu palpite em "razoavelmente curto", pois grep
encontra a primeira correspondência e gera a saída junto com as próximas 5.000 linhas (o arquivo não precisa ter tantas). Se você não quiser a correspondência em si, precisará cortá-la, por exemplo,
grep -A5000 -m1 -e 'dog 123 4335' animals.txt | tail -n+2
Se você não quer o primeiro, mas a última correspondência como delimitador, você pode usar isto:
tac animals.txt | sed -e '/dog 123 4335/q' | tac
Esta linha lê animals.txt
na ordem inversa das linhas e gera até e inclui a linha com dog 123 4335
e depois reverte novamente para restaurar a ordem correta.
Novamente, se você não precisar da correspondência no resultado, anexe a parte final. (Você também pode complicar a expressão sed para descartar seu buffer antes de sair.)