Suite à mon précédent billet et avec l'aide de Christophe, j'ai fini par trouver comment joindre deux lignes d'un fichier si la première ligne correspond à un modèle. Pour cela, j'utilise sed de cette façon :

sed -e '/<screen>$/N; s/<screen>
/<screen>/;' fichier_avant > fichier_apres

sed lit un fichier ou l'entrée standard ligne par ligne. Cet outil place tout d'abord la ligne lue dans un tampon et va exécuter les instructions spécifiées sur ce tampon.

La première instruction, /<screen>$/N, va chercher une ligne finissant (car $) par <screen>. Le N lui demande d'ajouter un retour chariot dans le tampon ainsi que la prochaine ligne en attente. Je vais donc me trouver avec un tampon contenant la jointure des deux lignes dont la première finit par <screen>.

La deuxième instruction s'exécute à partir du tampon et est plus habituelle : s/<screen> /<screen>/. Cette instruction va donc supprimer tout simplement le retour chariot compris dans le tampon.

Cela fonctionne parfaitement. J'ai donc mis tout ça dans le petit script que voici :

for fichier in *.sgml
do
  backup=${fichier}.bak
  mv ${fichier} ${backup} && \
    sed \
      -e '/<screen>$/N; s/<screen>
/<screen>/;' \
      -e '/<synopsis>$/N; s/<synopsis>
/<synopsis>/;' \
      -e '/<literallayout>$/N; s/<literallayout>
/<literallayout>/;' \
      -e '/<programlisting>$/N; s/<programlisting>
/<programlisting>/;' \
      ${backup} > ${fichier}
done

Une fois exécuté, j'ai pu faire mon commit et améliorer encore le PDF :)