Contenu | Rechercher | Menus

Annonce

Toute l'équipe d'ubuntu-fr vous souhaite un joyeux Noël et une bonne et heureuse année 2018.

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, à 21: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, à 08: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, à 17: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, à 17:22)

Hors ligne

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

Anonyme68

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 Anonyme68 (Le 30/11/2017, à 18:04)


846/2381 jeux linux sur Steam

Vous avez plein d'ISO d'ubuntu ? Une bonne bande passante ? Aimer partager ? Essayer mon script

Hors ligne

#5 Le 30/11/2017, à 22: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