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

Linux Discussion :

Problème script avec sed


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 68
    Points : 37
    Points
    37
    Par défaut Problème script avec sed
    Bonjour à tous !

    Alors je poste sur le forum parce que je ne trouve pas ma solution à un problème avec la commande sed.
    J'ai un fichier (contenu.xml) contenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <attributes id="attr_ch_SiuToDopDest"> <attribute name="receiveport" value="30020"/> <attribute name="receiveaddress" value="pc_siu"/>
    <attribute name="idnoid" value="1"/>
    <attribute name="buffermaximum" value="65535"/> <attribute name="buffersend" value="65535"/>
    </attributes>
    J'aimerais remplacer toute cette chaine de caractère par autre chose.
    Pour celà, j'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    chaine_avant1='<attributes id="attr_ch_SiuToDopDest"> <attribute name="receiveport" value="30020"/> <attribute name="receiveaddress" value="pc_siu"/>\n<attribute name="idnoid" value="1"/>\n<attribute name="buffermaximum" value="65535"/> <attribute name="buffersend" value="65535"/>\n</attributes>'
    chaine_apres1='COUCOU'
     
     
    sed -i "s#$chaine_avant1 #$chaine_apres1 #g" $contenu.xml;
    Celà ne fonctionne pas , comme si il ne trouvait pas dans mon fichier la chaine que je lui indique, ce qui est vraiment bizarre est que lorsque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine_avant1='<attributes id="attr_ch_SiuToDopDest"> <attribute name="receiveport" value="30020"/>'
    , Celà fonctionne..
    Quelqu'un aurait-il une idée ?

    Merci de vos réponses !

    Edit : J'ai retiré les espace sur ma commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i "s#$chaine_avant1#$chaine_apres1#g" $contenu.xml;
    Mais ce sont clairement les retours chariots qui posent problèmes, et impossible pour moi de les supprimer. Donc je ne vois pas comment faire, si quelqu'un peut m'aider !
    Merci

  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,

    sed lit les fichiers ligne à ligne, donc ta première variable chaine_avant1 ne correspond à aucune ligne du fichier.

    le traitement de fichier xml devrait être effectué avec XSLT (traduit en français)
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    La seule chose envisageable via "sed" c'est d'utiliser la commande "c" (change) qui accepte les plages d'adressage...

    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
    17
    18
    19
    20
    $ cat plop 
    <attributes id="attr_ch_SiuToDopDest"> <attribute name="receiveport" value="30020"/> <attribute name="receiveaddress" value="pc_siu"/>
    <attribute name="idnoid" value="1"/>
    <attribute name="buffermaximum" value="65535"/> <attribute name="buffersend" value="65535"/>
    </attributes>
    
    $ DEBUT='<attributes id="attr_ch_SiuToDopDest">'
    
    $ FIN='</attributes>'
    
    $ APRES='COUCOU'
    
    $ sed -i.bak "/$DEBUT/,\#$FIN#c\
    $APRES
    " plop
    
    $ cat plop 
    COUCOU
    
    $
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 68
    Points : 37
    Points
    37
    Par défaut
    Super !
    Merci beaucoup

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

Discussions similaires

  1. [PowerShell] Problème Script avec csv
    Par Jonathan_Mi dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 07/07/2015, 16h31
  2. Problème découpage avec sed
    Par Bhaalou dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 20/11/2012, 15h58
  3. problème script avec commande ll ?
    Par sajodia dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 30/05/2008, 11h26
  4. Script avec sed et awk
    Par arezki76 dans le forum Shell et commandes GNU
    Réponses: 15
    Dernier message: 04/01/2007, 14h56
  5. Script bash : Pb avec sed
    Par fred64 dans le forum Linux
    Réponses: 3
    Dernier message: 19/08/2005, 11h24

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