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