tac
aceita um separador, portanto, por exemplo bash
você pode fazer:
tac -s $'\n\n' foo
que produzirá uma saída ligeiramente incorreta porque o último parágrafo não é terminado por uma nova linha dupla. Então,
(cat foo; echo) | tac -s $'\n\n' | sed '$d'
é provavelmente o que você deseja. (Conteúdos de tubulação de foo
e nova linha até tac
, depois sed
para remover a última linha.)
Observação: não redirecione isso para > foo
novamente, pois você pode acabar com um arquivo vazio.