Contenu | Rechercher | Menus

Annonce

L'équipe des administrateurs et modérateurs du forum vous invite à prendre connaissance des nouvelles règles.
En cas de besoin, vous pouvez intervenir dans cette discussion.

N'oubliez pas de cocher la case « Ajustement pour l'heure d'été » dans votre profil.

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

#1 Le 29/11/2017, à 22:50

ShellNoob

Script Shell: intégrer des balises dans un fichier XML

Bonjour,

J'aurais besoin d'aide car je cherches à modifier un fichier XML en y ajoutant du contenu entre les bonnes balises.

Je disposes d'un fichier es_systems.xml qui commence et termine avec les balises.

<?xml version="1.0"?>
<systemList>

</systemList>

Je cherches à intégrer le contenu d'un autre fichier "jeux_1.xml" dans "es_systems.xml", les nouveaux motifs doivent s'intégrer entre les balises systemList.

Mon fichier jeux_1.xml à la forme suivante:

<system>
    <fullname></fullname>
    <name></name>
    <path></path>
    <extension></extension>
    <command> </command>
    <platform></platform>
    <theme></theme>
    <emulators>
      <emulator name="">
        <cores>
          <core></core>
        </cores>
      </emulator>
    </emulators>
  </system>

En utilisant AWK, j'arrives presque au résultat voulu en faisant comme ça:

awk -vfile=jeux.xml 'BEGIN{oldRS=RS;RS="^$";getline data<file;RS=oldRS}/<systemList>/{$0=$0"\n"data}{print}' es_systems.xml >> es_systems_modifie.xml

es_systems.xml -> lu mais non modifié
es_systems_modifie.xml -> le même avec le contenu du fichier jeux.xml importé de dans

Problème si je relance une deuxième fois la commande mais en remplaçant jeux_1.xml par jeux_2.xml pour insérer un autre ensemble de balise, cela duplique les balises <systemList></systemList> du fait de le redirection dans le fichier. Il y aurai un moye d'éviter la redirection pour modifier le fichier original et éviter de dédoubler les balsies de début et de fin?

PS: pas de possibilité d'utiliser xmlstarlet sur la distrib

Hors ligne

#2 Le 30/11/2017, à 09:59

pingouinux

Re : Script Shell: intégrer des balises dans un fichier XML

Bonjour,
Tu peux créer un fichier intermédiaire avec la première commande, qui te servira d'entrée pour la seconde, mais les insertions seront inversées.

awk -vfile=jeux_1.xml 'BEGIN{oldRS=RS;RS="^$";getline data<file;RS=oldRS}/<systemList>/{$0=$0"\n"data}{print}' es_systems.xml >fichier_intermediaire
awk -vfile=jeux_2.xml 'BEGIN{oldRS=RS;RS="^$";getline data<file;RS=oldRS}/<systemList>/{$0=$0"\n"data}{print}' fichier_intermediaire > es_systems_modifie.xml

Hors ligne

#3 Le 30/11/2017, à 18:22

ShellNoob

Re : Script Shell: intégrer des balises dans un fichier XML

Merci pingouinux smile

J'ai trouvé une autre solution ultra simple

Pour inserer aprés la balise <systemList> en début de fichier

sed '/<systemList>/r jeux.xml' es_systems.xml

Ou le contraire en fin de fichier avant la balise systemList qui ferme

sed ':A;$bB;N;:B;/<\/systemList>/!b;h;s/.*/cat jeux.xml/e;G' es_systems.xml

Je rajoutes juste un redirection à la fin pour écrire mon fichier de conf

sed '/<systemList>/r jeux.xml' es_systems.xml > temp.xml && mv temp.xml es_systems.xml

Dernière modification par ShellNoob (Le 30/11/2017, à 18:22)

Hors ligne

#4 Le 30/11/2017, à 19:04

Compte anonymisé

Re : Script Shell: intégrer des balises dans un fichier XML

Bonjour,

au cas où

sed '/<systemList>/r jeux.xml' es_systems.xml > temp.xml && mv temp.xml es_systems.xml

=

sed -i '/<systemList>/r jeux.xml' es_systems.xml

Dernière modification par Compte anonymisé (Le 30/11/2017, à 19:04)

#5 Le 30/11/2017, à 23:01

ShellNoob

Re : Script Shell: intégrer des balises dans un fichier XML

Merci Anonyme68!
A la base, je n'avais pas mis par -i car je pensais que Busybox ne l'interprêtait pas mais en fait si ^^

Hors ligne