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 un fichier à partir d'une table de comparaison et de remplacement


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut Modifier un fichier à partir d'une table de comparaison et de remplacement
    Bonjour,

    J'ai un fichier XML évolutif au sein duquel j'aimerais remplacer des noms de ville à partir d'identifiant contenu dans une table de correspondance. pour chaque occurence du fichier.

    exemple : table de correspondance

    PARIS;75000
    BORDEAUX;33000

    J'étais parti sur un sed mais j'ai beau creuser je ne trouve pas.

    Quelqu'un peut il m'aider SVP.
    A votre disposition si vous avez besoin d'informations complémentaires.

    J'ai déjà la boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while read line
    do 
    var1=$( echo "$line" | sed -n -E 's/.*Station="(.*)".*Value.*/\1/ p' )
     
    	if [ "$var1" ] ; then
    		var2=$(echo "$var1" | tr a-z A-Z | cut -c 1-4)
    		echo -e "$line" | sed -n -E "s/${var1}/${var2}/ g" >> new_fichier.xml 
    	else 
    		echo -e "$line" >> new_fichier.xml  
    	fi
     
    done < fichier.xml
    Merci beaucoup

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour

    La boucle est la dernière chose dont on a besoin puisque sed/awk/cut... sont des boucles ...

    Sincèrement, le premier réflexe est de dire que, pour manipuler un fichier xml, il est plus approprié d'utiliser un outil fait pour, plutôt que sed, comme par exemple xmllint, dont les premières lignes du man xmllint donnent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NAME
           xmllint - command line XML tool

    Maintenant, si tu veux sed, à ta place, plusieurs personnes feraient comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ cat xmlpostal.txt
    Maman va au marché à Paris.
    Elle achète des carottes pour tonton de Bordeaux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ cat xmlpostalcorrespondance.txt 
    Paris;75000
    Bordeaux;33000
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ sed 's/\(.*\);\(.*\)/s@\1@\2@/' xmlpostalcorrespondance.txt | sed -f - xmlpostal.txt
    Maman va au marché à 75000.
    Elle achète des carottes pour tonton de 33000.
    D'autres comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ awk -F';' '{print "s@"$1"@"$2"@";}' xmlpostalcorrespondance.txt | sed -f - xmlpostal.txt
    Maman va au marché à 75000.
    Elle achète des carottes pour tonton de 33000.

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut
    Bonjour,

    Merci pour l'aide.

    Mon serveur n'avez pas la commande xmllint.

    j'ai donc procédé avec awk et sed.

    cependant j'ai un retour d'erreur.
    " sed: 1: xmlpostal.txt: invalid command code j "

    avez-vous une idée ?

    je précise que j'ai essayé les options -e -i - n sur sed -f xmlpostal.txt.

    Merci encore

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    je précise que j'ai essayé les options -e -i - n sur sed -f xmlpostal.txt.
    Ben déjà, il manque un tiret après -f.

    Ensuite, il me semble que -i, sous mac, nécessite un argument, comme '' (2 quotes).

  5. #5
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut
    bonjour,

    Merci du retour rapide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ sed 's/\(.*\);\(.*\)/s@\1@\2@/' xmlpostalcorrespondance.txt | sed -f - xmlpostal.txt
    me retourne l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed: -: No such file or directory
    C'est pour cela que je l'avais enlevé.

    @+

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ sed -f <( sed 's/\(.*\);\(.*\)/s@\1@\2@/' xmlpostalcorrespondance.txt ) xmlpostal.txt
    Y a un moment, il faudra donner ta distribution, la version de Linux, Bash, sed.

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/08/2009, 15h08
  2. generé un fichier xml a partir d'une table oracle
    Par sws2008 dans le forum Accès aux données
    Réponses: 1
    Dernier message: 25/04/2008, 13h02
  3. Réponses: 8
    Dernier message: 14/02/2008, 18h04
  4. [MySQL] Création d'un fichier xml à partir d'une table
    Par astrolane dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/12/2006, 23h12
  5. Réponses: 4
    Dernier message: 02/05/2005, 20h25

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