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 :

SED + echo => comportement étrange


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut SED + echo => comportement étrange
    Hello,

    j'ai le script suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo "`sed -e 's/<?xml[^>]*>//g' ${Lc_Fichier}`" > ${Lc_Fichier}	
    # echo `sed -e 's/<?xml[^>]*>//g' ${Lc_Fichier}` > ${Lc_Fichier}	
    echo "`sed -e '1d' ${Lc_Fichier} `" > ${Lc_Fichier}
    dans mon xml en entrée j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?xml version="1.0" encoding="iso-8859-1"?>
    <bla .....
    Le truc là, c'est que, si j'utilise la première version du sed, je suis obligé de rajouter un deuxième sed pour supprimer la 1ere ligne qui est vide.
    Alors qu'avec l'autre version (ici commentée), pas besoin, car il supprime bien ma balise <?xml, et la ligne associée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?xml version="1.0" encoding="iso-8859-1"?>
    <bla ....
    devient donc :
    avec la 1ere commande.

    ou

    avec la 2e


    Là en passant par deux commandes, j'arrive à faire ce que je veux, mais je voudrais bien savoir, pourquoi un tel comportement?

  2. #2
    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
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ cat brol 
    <?xml version="1.0" encoding="iso-8859-1"?>
    <bla .....
     
    $ sed -i.bak '/<?xml[^>]*>/d' brol 
     
    $ cat brol 
    <bla .....
     
    $

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut


    Par contre, quelqu'un saurait m'expliquer cette différence de comportement ?

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut
    Hm, problème, si le contenu de mon xml est sur la même ligne, ça me supprime tout alors que je veux juste supprimer <?xml .. >

  5. #5
    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
    Citation Envoyé par erox44 Voir le message
    Hm, problème, si le contenu de mon xml est sur la même ligne, ça me supprime tout alors que je veux juste supprimer <?xml .. >
    D'où l'intérêt de poster des exemples CONCRETS et non des approximations

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ cat plop 
    <?xml version="1.0" encoding="iso-8859-1"?>
    <bla .....
    <?xml version="1.0" encoding="iso-8859-1"?><bla .....
    <?xml version="1.0" encoding="iso-8859-1"?>
    <bla .....
     
    $ sed '/<?xml[^>]*>$/d;/<?xml[^>]*>/s///' plop 
    <bla .....
    <bla .....
    <bla .....
     
    $

  6. #6
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Sinon quelque chose comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "s/<?xml[^>]*?>//g" fichier
    Et si les lignes vides gênent (en XML ça ne devrait pas être le cas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "s/<?xml[^>]*?>//g;/^$/d" fichier
    Mais rassures-moi, tu ne fait pas ça pour faire de l'aggrégation de XML ?

    Idriss

  7. #7
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    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 347
    Par défaut
    Bonjour,
    sed n'est pas le plus adapté pour traiter du xml, il existe des outils pour ça, comme par exemple xmllint et certainement d'autre.

    Dans ta première version, la ligne supplémentaire est présente car quand la commande 's' ne supprime pas de ligne, donc si après son replace, la ligne peut être vide mais pas inexistante.

    Après en xml, le retour à la ligne pourrait ne pas exister du tout, donc un delete pourrait supprimer la totalité de ton fichier.

    Donc, pour résoudre ton souci:
    On cherhce le pattern et si celui-ci existe on fait:
    Remplacer le pattern (en fait ici par rien) et ensuite si la ligne est vide, alors on la supprime.
    Ce qui doit donner quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /<pattern_a_remplacer_par_rien>/{s/<pattern_a_remplacer_par_rien>//g;/^ *$/d;}
    EDIT: correction de mon expression car oublie du marqueur de début de ligne pour la partie delete.
    J'en profite pour signaler que cette version ne fera le delete que si on trouve le pattern à remplacer contrairement aux autre solution proposées (sauf celle de zipe31) .

  8. #8
    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
    Citation Envoyé par disedorgue Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /<pattern_a_remplacer_par_rien>/{s/<pattern_a_remplacer_par_rien>//g;/^ *$/d;}
    La reprise du motif dans la substitution est inutile quand on matche exactement le même motif :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/<pattern_a_remplacer_par_rien>/{s///}' fichier
    Fera la même chose

  9. #9
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut
    Ok, je teste ça je vous redis.


    En fait, les xml qu'on en entrée peuvent être soit formattés ( sur deux lignes donc) soit non formatté ( sur une seule ligne).

    Dans tous les cas, il faut supprimer la dite balise <?xml ... >


    PS: malheureusement si, aggregation de xml ^^ ( appli historique donc impossible de changer ça )

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

Discussions similaires

  1. [Forms6i] Un IF-ELSIF au comportement étrange
    Par lafouine dans le forum Forms
    Réponses: 11
    Dernier message: 13/09/2005, 15h40
  2. Comportement étrange apres une désinstallation
    Par Sunchaser dans le forum Excel
    Réponses: 4
    Dernier message: 06/08/2005, 19h44
  3. comportement étrange d'une jointure ...
    Par amenis dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 10/02/2005, 21h27
  4. [Système][Runtime][Exec] Comportement étrange au lancement de BeSweet
    Par divxdede dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 06/06/2004, 09h54
  5. Réponses: 2
    Dernier message: 22/09/2003, 11h23

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