jeudi, avril 27 2006, 00:41
Script sed pour joindre deux lignes
Par Guillaume Lelarge - Linux - Lien permanent
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 
un commentaire
Oui, enfin, pour le coup du sed, je n'ai pas aidé des masses