IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Modifier le contenu d'une variable dans un fichier de conf XML


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 10
    Points : 10
    Points
    10
    Par défaut Modifier le contenu d'une variable dans un fichier de conf XML
    Bonjour à tous,

    Je sollicites votre aide car j'aimerais modifier des variables dans un fichier de configuration au format XML dont les balises sont de la forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0"?>
    <config>
    	<string name="ThemeSet" value="recalbox" />
    	<string name="UpdateVersionFile" value="/recalbox/share/system/upgrade/recalbox.version.update" />
    	<string name="VersionFile" value="/recalbox/recalbox.version" />
    </config>
    Je voudrais faire un script XML qui chercher la clé "ThemeSet" pour remplacer le contenu de la variable value=recalbox par une autre

    J'arrives à faire ma recherche dans le fichier comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    variable_theme=$(sed -rn '/ThemeSet/s/.*value="([^"]+)".*/\1/p' fichier_xml)
    echo nom_theme="$variable_theme"
    Mais je ne sais pas comment faire la partie remplacer

    Quel serait la meilleur méthode pour arriver au résultat voulu?
    Merci par avance pour votre aide.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Bonjour,

    Je voudrais faire un script XML
    alors, utilise un parser xml : xsltproc, xmlstarlet...
    ou un langage capable de gérer le XML : python, perl...

    parce qu'on ne peut pas présumer de la forme d'un fichier contenant du langage de balisage (html, xml...).

    Je bloc déjà sur la partie recherche dans le fichier avec le SED
    pourquoi dire à sed que l'expression recherchée commence (^) par \value ?
    Quel serait la meilleur méthode pour arriver au résultat voulu?
    utiliser un parser XML, ou un langage capable...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Merci, solution trouvée avec SED pour rechercher/remplacer la valeur de la variable voulue dans le fichier XML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -ri '/ThemeSet/s/(.*value=")[^"]+(".*)/\1recalbox_custom\2/' fichier_xml

  4. #4
    Membre du Club
    Homme Profil pro
    troll prépubère
    Inscrit en
    Janvier 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : troll prépubère

    Informations forums :
    Inscription : Janvier 2017
    Messages : 31
    Points : 62
    Points
    62
    Par défaut
    c'est bien d'être venu donner la solution
    fournie par pingouinux@ubuntu-fr.

  5. #5
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    c'est encore mieux d'être constructif

    +1 pour le fait d'utiliser l'outil adapté, parser du XML avec sed c'est considéré comme pure evil

    donc à coups de xmlstarlet, et en remplaçant le fichier d'origine (comme dans la solution sed) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlstarlet edit --inplace --update "/config/string[@name='ThemeSet']" --value "TOTO" fichier.xml

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Merci BufferBob pour ta solution avec xmlstarlet
    je sais que c'est pas top d'attaquer du XML avec sed mais je le fais sur un distrib ou il n'y a pas le package xmlstarlet et pas possibilité de l'installer.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modifier le contenu d'une variable
    Par klm42 dans le forum SAS Base
    Réponses: 2
    Dernier message: 26/04/2015, 20h49
  2. Réponses: 1
    Dernier message: 12/07/2007, 08h16
  3. PB récupérez le contenu d'une variable dans une balise titr
    Par crevettepourrie dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/01/2006, 17h41
  4. modifier une variable dans un fichier
    Par Guismay dans le forum Langage
    Réponses: 7
    Dernier message: 11/09/2005, 19h46
  5. Réponses: 3
    Dernier message: 27/07/2005, 15h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo