Tente isto:
$ awk -v RS="STARTLOG" '/ERROR/{print RS$0; }' log
STARTLOG2
ERROR: Errortext
This is an Error
from user XYZ
ENDLOG2
Para redirecionar para um arquivo chamado logN
, onde N é o número de STARTLOG
, use:
gawk -v RS="STARTLOG" '/ERROR/{print RS$0 > "log"$1; }' log
Explicação
RS
é o separador de registros, é o que define o que é uma "linha" para awk
. Aqui, estou configurando para STARTLOG
, para que todo o registro seja tratado como uma única linha. Então, se essa "linha" contiver ERROR
, imprimo STARTLOG
(o RS
, isso é apenas para recriar o mesmo formato).
Você também pode usar a mesma abordagem com o Perl:
perl -lne 'BEGIN{$/="STARTLOG"}{print "$/$_" if /ERROR/}' log