Ah merde, t'as quelle version ? J'ai jamais vu un sed où l'option -r ne soit pas disponible ; regarde dans le man si elle n'a pas un autre switch par hasard : c'est l'option qui permet d'utiliser des "extended regular expressions". Si tu ne l'a pas, il faudra échapper tout un tas de caractères spéciaux, comme les parenthèses (mais je ne connais pas la liste exacte et flemme de chercher

)
Sinon pour expliquer brièvement, la commande se décompose en trois parties qui sont trois traitements à appliquer à chaque ligne :
sed -nr '/^ZZZ(.*)$/ { x;/.+/p } ; /^ZZZ(.*)$/ !{ H;x;s/^(.*)\n(.*)$/\1\2/;x } ; $ { x;p }' <ton fichier>
En rouge, on ne prend la ligne en compte que si elle commence par ZZZ (regexp: ^ZZZ(.*)$). Dans ce cas, on est sur le début d'une ligne, donc on va afficher celle qu'on avait gardé en mémoire jusqu'ici ("x" permet d'alterner entre la ligne active et le buffer interne, "p" permet d'afficher).
En vert, on ne prend la ligne en compte que si elle ne commence
pas par ZZZ. Dans ce cas, on est sur la suite d'une ligne précédente qu'on a déjà dans notre buffer interne. On va la concaténer au buffer (commande "H"), qui contient donc les deux lignes séparées par "\n", puis effectuer une substitution pour dégager ce "\n" (commande "s/^(.*)\n(.*)$/\1\2/").
En bleu, on effectue un traitement une fois la fin du fichier atteinte, pour afficher le contenu de ce qu'il reste dans le buffer (sinon la dernière ligne du fichier va rester dans le buffer et ne sera jamais affichée, puisqu'elle n'est pas suivie par une ligne en "ZZZ").
Chez moi ça marche ©, mais peut-être que tu devras faire quelques ajustements selon ton besoin
