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 :

Remplacer un ensemble de lignes par un autre ensemble dans plusieurs fichiers


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 23
    Points : 12
    Points
    12
    Par défaut Remplacer un ensemble de lignes par un autre ensemble dans plusieurs fichiers
    Bonjour,

    Je voudrais remplacer tout un ensemble de lignes par un autre ensemble de lignes et ce dans plusieurs fichiers de la même structure.
    Je m'explique : j'ai une multitude de fichiers xml contenant le paragraphe suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (...)
    <tata>
    	(...)contenu divers(...)
    </tata>
    (...)
    Je voudrais remplacer ce paragraphe entouré par les balises tata par le paragraphe suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <tutu>
     (...)contenu divers(...)
    <tutu>
    Comment dois-je m'y prendre, quelle est la commande exacte à saisir ?

    Merci pour vos réponses.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    J'ai trouvé tout seul l'astuce, qui est la suivante :

    sed -e "/tata>/,/<\/tata/d"
    pour supprimer tout ce qu'il y a entre "tata> et "</tata" pour ne laisser que "<>"

    puis
    sed -e "s/<>/<tutu>(...)contenu divers en faisant attention au caracteres speciaux(...)<\/tutu>/g"
    pour remplacer le "<>" sur une seule ligne par mon paragraphe entier

    Ceci dans un script avec une boucle for pour pouvoir parcourir tous les fichiers.

    Qu'en pensez-vous ?

  3. #3
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Je te propose la solution suivante

    cat test.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <titi>
            (...)contenu titi(...)
    </titi>
    (...)
    <tata>
            (...)contenu divers(...)
    </tata>(...)
    <toto>
            (...)contenu toto(...)
    </toto>
    (...)
    cat tutu.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <tutu>
            (...)contenu tutu(...)
    </tutu>
    sed :

    1) r (read) lit et insère le fichier tutu.xml avant l'élément <tata>
    2) delete de <tata> à </tata>


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e "/^<tata>/r tutu.xml" -e "/^<tata>/,/^<\/tata>/d" test.xml

    Résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <titi>
            (...)contenu titi(...)
    </titi>
    (...)
    <tutu>
            (...)contenu tutu(...)
    </tutu>(...)
    <toto>
            (...)contenu toto(...)
    </toto>
    (...)
    Loi de Murphy:
    La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
    La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
    Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.

Discussions similaires

  1. Réponses: 10
    Dernier message: 24/11/2008, 13h14
  2. Réponses: 7
    Dernier message: 21/05/2008, 17h29
  3. Remplacer une chaine de car par une autre ds 1 ligne
    Par jayan dans le forum VBScript
    Réponses: 1
    Dernier message: 07/05/2008, 10h24
  4. Remplacer Saut de ligne par un autre caractère
    Par kurtalis dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 18/05/2007, 17h40
  5. Réponses: 9
    Dernier message: 22/05/2006, 12h21

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