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 :

Problème avec SED


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2021
    Messages : 7
    Par défaut Problème avec SED
    Bonjour,
    Je souhaite dans un fichier XML remplacer le texte entre deux balise par des X tout en respectant la longueur du texte à remplacer, voici un extrait de mon fichier :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <Id>id001</Id>
    <user>bob</user>
    <mp>mp1234567</pm>
    <fonction> saisie commande </fonction>

    et voici le résultat souhaité :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <Id>XXXXX</Id>
    <user>XXX</user>
    <mp>XXXXXXXXX</pm>
    <fonction>XXXXXXXXXXXXXX</fonction>

    pour la balise ID j'ai essayé la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed  ':a;s/\(Id\x*\)[^x]\([^x]*\</Id\)/\1x\2/;t a' my_file
    J4ai le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed: -e expression #1, char 34: unknown option to `s'

  2. #2
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    En utilisant l'option -E et en choisissant un séparateur adapté pour l'opérateur s, il est quand même possible de rendre ça plus lisible (et donc moins source d'erreurs) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -E ':a; s%(<Id>x*)[^x]([^x]*</Id>)%\1x\2%; t a' my_file

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 686
    Par défaut
    le XML se traite avec un parser xml : xmlstarlet, etc.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 378
    Par défaut
    N_BaH a raison, exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ cat /tmp/t1.xml 
    <Id>id001</Id>
    <user>bob</user>
    <mp>mp1234567</pm>
    <fonction> saisie commande </fonction>
    <Id>id002</Id> <user>bob</user> <mp>mp1234567</pm> <fonction> saisie commande </fonction> <Id>id003</Id> <user>bob</user> <mp>mp1234567</pm> <fonction> saisie commande </fonction>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ sed -E ':a; s%(<Id>x*)[^x]([^x]*</Id>)%\1x\2%; t a' /tmp/t1.xml 
    <Id>xxxxx</Id>
    <user>bob</user>
    <mp>mp1234567</pm>
    <fonction> saisie commande </fonction>
    <Id>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</Id> <user>bob</user> <mp>mp1234567</pm> <fonction> saisie commande </fonction>
    Petit soucis sur la dernière ligne qui est un format normal en xml...

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

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ cat t1.xml
    <xml><Id>id001</Id>
    <user>bob</user>
    <mp>mp1234567</mp>
    <fonction> saisie commande </fonction>
    <Id>id002</Id> <user>bob</user> <mp>mp1234567</mp> <fonction> saisie commande </fonction> <Id>id003</Id> <user>bob</user> <mp>mp1234567</mp> <fonction> saisie commande </fonction></xml>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $ xmlstarlet ed -u '/xml/mp' -v 'Alors ? On voulait mon mot de passe ?' t1.xml
    <?xml version="1.0"?>
    <xml>
      <Id>id001</Id>
      <user>bob</user>
      <mp>Alors ? On voulait mon mot de passe ?</mp>
      <fonction> saisie commande </fonction>
      <Id>id002</Id>
      <user>bob</user>
      <mp>Alors ? On voulait mon mot de passe ?</mp>
      <fonction> saisie commande </fonction>
      <Id>id003</Id>
      <user>bob</user>
      <mp>Alors ? On voulait mon mot de passe ?</mp>
      <fonction> saisie commande </fonction>
    </xml>

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2021
    Messages : 7
    Par défaut
    Bonjour,

    Merci à tous pour vos réponses. Le but étant de rester sur des commandes natives Linux d'où le SED.
    la solution de balkany fonctionne.

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

Discussions similaires

  1. [OS X] [SH] Problème avec sed et fichier texte
    Par RyuAutodidacte dans le forum Shell et commandes POSIX
    Réponses: 8
    Dernier message: 13/06/2019, 17h04
  2. Problème avec sed * et +
    Par DIE dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 02/11/2009, 11h34
  3. Problème avec SED et les caractères "/" sur Solaris
    Par supermen3000 dans le forum Solaris
    Réponses: 2
    Dernier message: 03/07/2009, 12h14
  4. [Shell] problème avec sed et awk
    Par tizilfin dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 15/11/2007, 14h01
  5. Problème avec sed
    Par Zlika_ese dans le forum Linux
    Réponses: 1
    Dernier message: 26/05/2007, 22h39

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