Em awk , algo assim:
awk '/====/ { t = ""; next } { t = t $0 "\n"; } END { printf "%s", t; }' < sample.txt
Armazena as linhas de entrada em t e limpa t quando vê ==== . O que já está lá é impresso no final.
Note que
- O
==== não precisa estar em uma linha própria (estritamente falando, você não disse que deveria ser). Se você quiser apenas reconhecê-lo quando for a única coisa em uma linha, use /^====$/ .
- Isso imprime toda a entrada se
==== não for visto. Verificando se há pelo menos um precisa de uma condição extra, veja abaixo.
- Sua saída de amostra está sem a primeira linha vazia após o
==== , mas isso pode ser apenas a formatação da postagem. Se você quiser removê-lo, adicione um canal a sed 1d .
Outra versão que só começa a armazenar a entrada depois que o separador ==== é visto, produzindo efetivamente uma saída vazia se a entrada não contiver o separador:
awk '/====/ { any = 1; t = ""; next } any { t = t $0 "\n"; } END { printf "%s", t; }' < sample.txt