Eu usaria um comando perl
assim:
perl -ne 'if($_=~/^-=Begin/){@last=@block; @block=(); push(@block,$_);}else{push(@block,$_)}; END{@last=@block; print @last}'
Explicação:
-
perl -ne '
- > ler linha de entrada sábia -
if($_=~/^-=Begin/){@last=@block; @block=();push(@block,$_);}
- > liberar o último bloco para a matriz por último e iniciar o novo bloco se a linha começar com - = Iniciar -
else{push(@block,$_)};
- > adicionar linha atual para bloquear -
END{@last=@block; print @last}'
- > liberar o último bloco e imprimi-lo
Para ler sid_changes.log
e escrever em outfile.log
, você pode executá-lo assim:
perl -ne '...' < sid_changes.log > outfile.log