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 :

Commande SED : remplacer espaces par %20 dans lignes commençant par x et finissant par y


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut Commande SED : remplacer espaces par %20 dans lignes commençant par x et finissant par y
    Bonjour à tous,

    J'essaye de remplacer des double-espaces par "%20%20" dans des lignes commençant par <PLAN_VENTE> et finissant par </PLAN_VENTE> dans un fichier xml, sans succès. Je m'arrache les cheveux !

    J'ai essayé plusieurs syntaxes, dont celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i -e "/^<PLAN_DE_VENTE>*<\/PLAN_DE_VENTE>$/ s/  /%20%20/g" mon_fichier.xml
    Sans succès...

    Merci pour votre aide et joyeuses fêtes de fin d'année
    Fichiers attachés Fichiers attachés

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 728
    Par défaut
    ENTE>.*<\/PL

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    ENTE>.*<\/PL
    Merci pour votre réponse. Cela n'a malheureusement pas eu d'effet

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 728
    Par défaut
    mets-nous le fichier en pièce jointe pour qu'on puisse le consulter sans en modifier le format, et le type.

    d'où vient ce fichier ?

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    C'est fait, c'est un fichier que j'ai créé pour test. Il faudrait mettre %20%20 entre Paris et Amiral dans les balises PLAN_VENTE.

    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 728
    Par défaut
    ton fichier a été créé sous W$ : les fins de lignes gênent sa lecture correcte sur Linux.

    il faut le "déWindowser" avant toute exploitation sur Linux : sed -i 's/\r//' tonFichier

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    J'ai exécuté sed -i 's/\r//' ainsi que ta précédente commande, ça n'a toujours pas eu l'effet escompté... j'en deviens dingue

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 728
    Par défaut
    hmmm. bizarre.sed '/<PLAN_DE_VENTE>.*<\/PLAN_DE_VENTE>$/s/ /%20%20/g' tonFichier modifie bien tous les espaces doubles.
    par contre, ça modifie aussi ceux en début de ligne.

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

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

    Dans la vie, il faut avoir de l'étiquette.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ sed ':z;s@\(<PLAN_DE_VENTE>.*\) \(.*</PLAN_DE_VENTE>\)@\1%20\2@;tz' pgm.xml | grep PLAN
          <PLAN_DE_VENTE>http://test.com/ressources/files/documents/5dade920e1c94_Paris%20%20Amiral%20-%20Plan%20projet%20-%20lot%200A.pdf</PLAN_DE_VENTE>
          <PLAN_DE_VENTE>http://test.com/ressources/files/documents/5dade92a53e5f_Paris%20%20Amiral%20-%20Plan%20projet%20-%20lot%200B.pdf</PLAN_DE_VENTE>
          <PLAN_DE_VENTE>http://test.com/ressources/files/documents/5dade93500f07_Paris%20%20Amiral%20-%20Plan%20projet%20-%20lot%201A.pdf</PLAN_DE_VENTE>
          <PLAN_DE_VENTE>http://test.com/ressources/files/documents/5dade94990af2_Paris%20%20Amiral%20-%20Plan%20projet%20-%20lot%201C.pdf</PLAN_DE_VENTE>
          <PLAN_DE_VENTE>http://test.com/ressources/files/documents/5dade95f74584_Paris%20%20Amiral%20-%20Plan%20projet%20-%20lot%202B.pdf</PLAN_DE_VENTE>
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ sed ':z;s@\(<PLAN_DE_VENTE>.*\) \(.*</PLAN_DE_VENTE>\)@\1%20\2@;tz' fichier.xml

  10. #10
    Expert confirmé

    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
    Par défaut L'extrémité d'un mot
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '\#<PLAN_DE_VENTE># s#\b  #%20%20#g' fichier

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    Dans la vie, il faut avoir de l'étiquette.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ sed ':z;s@\(<PLAN_DE_VENTE>.*\) \(.*</PLAN_DE_VENTE>\)@\1%20\2@;tz' pgm.xml | grep PLAN
          <PLAN_DE_VENTE>http://test.com/ressources/files/documents/5dade920e1c94_Paris%20%20Amiral%20-%20Plan%20projet%20-%20lot%200A.pdf</PLAN_DE_VENTE>
          <PLAN_DE_VENTE>http://test.com/ressources/files/documents/5dade92a53e5f_Paris%20%20Amiral%20-%20Plan%20projet%20-%20lot%200B.pdf</PLAN_DE_VENTE>
          <PLAN_DE_VENTE>http://test.com/ressources/files/documents/5dade93500f07_Paris%20%20Amiral%20-%20Plan%20projet%20-%20lot%201A.pdf</PLAN_DE_VENTE>
          <PLAN_DE_VENTE>http://test.com/ressources/files/documents/5dade94990af2_Paris%20%20Amiral%20-%20Plan%20projet%20-%20lot%201C.pdf</PLAN_DE_VENTE>
          <PLAN_DE_VENTE>http://test.com/ressources/files/documents/5dade95f74584_Paris%20%20Amiral%20-%20Plan%20projet%20-%20lot%202B.pdf</PLAN_DE_VENTE>
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ sed ':z;s@\(<PLAN_DE_VENTE>.*\) \(.*</PLAN_DE_VENTE>\)@\1%20\2@;tz' fichier.xml
    Bonjour,

    ça remplace tous les espaces par %20 mais tout compte fait ça répond totalement à mon besoin, mille mercis ! Pourrais-je avoir le "décorticage" de votre commande, pour ma gouverne ?

    Merci encore et joyeux Noël

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '\#<PLAN_DE_VENTE># s#\b  #%20%20#g' fichier
    Salut,

    Merci pour votre réponse, ça répond aussi (exactement) à mon besoin ! Pareil, est-il possible d'avoir des explications sur la commande ?

    Merci encore et joyeux Noël !

  13. #13
    Expert confirmé

    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
    Par défaut
    Re-

    Citation Envoyé par Alouchi Voir le message
    Eest-il possible d'avoir des explications sur la commande ?

    \#<PLAN_DE_VENTE>#

    le \# sert à initialiser un nouveau séparateur à la place du "/" (slash) par défaut. Je me rends compte que dans ma syntaxe il n'était pas obligatoire, mais comme dans tes 1ers essais tu avais des problèmes, et que ces problèmes venaient de là, autant que tu sois au courant qu'on peut en changer. Ici, en mode "recherche" il est obligatoire de le faire précéder d'un "\". Pour la commande de substitution, ce n'est pas nécessaire.


    s#\b #%20%20#g
    Là aussi j'ai gardé le "#" comme séparateur, mais il n'était pas obligatoire.
    La regex "\b" correspond à une chaîne vide à l'extrémité d'un mot, ce qui permet de ne pas tenir compte des espaces présents en début de ligne. Elle est suivie de 2 espaces (pas très visibles comme ça, mais il y en a bien deux).
    La seconde partie, tu l'as bien compris, remplace ces 2 espaces par "%20".
    Le "g" final, n'est là qu'au cas où il y aurait plusieurs motifs correspondants sur la même ligne.

    Bonnes fêtes de fin d'année à toi aussi.

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 32
    Par défaut
    C'est clair comme de l'eau de roche, merci d'avoir pris le temps de m'expliquer

    Bonne continuation

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 300
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    :z;s@\(<PLAN_DE_VENTE>.*\) \(.*</PLAN_DE_VENTE>\)@\1%20\2@;tz
    :z étiquette z

    ; séparation entre les commandes. On peut aussi faire sed -e 'commande1' -e 'commande2' ... -e 'commanden'.

    s@regexp1@exp2@ remplacer regexp1 par exp2
    \(regexp3\) capture de regexp3
    \1, \2, ... \9 référence arrière pour désigner le premier groupe capturé, le second groupe capturé ... le neuvième groupe capturé.
    . n'importe quel caractère
    .* un ensemble de 0 ou plus caractère(s).
    s@\(<PLAN_DE_VENTE>.*\) \(.*</PLAN_DE_VENTE>\)@\1%20\2@ remplacer le dernier espace entre les balises par %20.

    tz sauter à l'étiquette z si la substitution a réussi. Branchement conditionnel.

    :z;s@\(<PLAN_DE_VENTE>.*\) \(.*</PLAN_DE_VENTE>\)@\1%20\2@;tz remplacer tous les espaces entre les balises PLAN_DE_VENTE par %20.

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

Discussions similaires

  1. [Batch] Remplacer espaces par underscores dans noms de fichiers
    Par Ysae68 dans le forum Scripts/Batch
    Réponses: 13
    Dernier message: 28/08/2017, 17h56
  2. Remplacer espaces par _ dans répertoires et fichiers
    Par fanch35 dans le forum Langage
    Réponses: 14
    Dernier message: 25/06/2012, 15h57
  3. [XL-MAC 2008] Remplacer espace par saut de ligne ?
    Par Mister Paul dans le forum Excel
    Réponses: 6
    Dernier message: 01/03/2012, 18h42
  4. remplacer espace par un tiret dans liens hypertexte
    Par kate59 dans le forum Langage
    Réponses: 2
    Dernier message: 21/07/2010, 12h09
  5. remplacer espace par tiret dans formulaire
    Par referenceur-tv dans le forum Langage
    Réponses: 17
    Dernier message: 03/06/2008, 15h52

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