Parsing XML à l’aide de la commande sed

Suite un petit problème pour traiter une flux xml avec sed, je vous livre une solution …
Le problème est le suivant : lorsque l’on a une suite de champs que l’on souhaite remplacer comme suite: (le < > sont remplacés par % pour simplifier l’ecriture de l’article)
de:
%tag1% valeur1 %etag1% %tag1% valeur2 %etag1%
à:
valeur1 valeur2

On pourrait avoir l’approche suivante :
sed -e ‘s/%tag1%(.*)%etag1%/1/g’
Mais le résultat est le suivant:
valeur1 %etag1% %tag1% valeur2

En effet, sed va matcher la plus longue pattern possible ce qui va donner le résultat précédent. Ce qui évidemment n’est pas adapté au traitement de flux XML. La solution est de ne pas utiliser sed mais perl qui va prendre, elle, la plus petite pattern possible pour peu qu’on le lui precise de la façon suivante:
perl -p -e ‘s/%tag1%(.*?)%etag1%/1/g’
Le résultat sera alors:
valeur1 valeur2
C’est l’ajout du “?” à la suite de .* qui précise que perl doit chercher le motif le plus court.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.