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 Expression Régulière


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut Problème Expression Régulière
    Bonjour,

    J'ai un problème avec une expression régulière. Voici mes lignes de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if ( expr $line : "/.*PUBPARC.*/" )
    then
    	if ( expr $line : "/.*DEPRECATED.*/" )
    	then
    		// première option //
    	else
    		// deuxième option //
    	fi
    fi
    Ceci appliqué à la ligne ci-dessous rentre dans la deuxième option.

    /exec/applis/blabla/PUBPARC/DEPRECATED_mon_test.xml

    Il trouve bien PUBPARC, mais refuse de trouver DEPRECATED.

    Merci d'avance pour votre aide

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Bonjour,
    Retire le "\" final de ton expression régulière qui ne fonctionne pas et cela devrait le faire
    d'ailleurs, les ".*" finaux sont inutiles et gaspille inutilement du temps.
    Cordialement.

  3. #3
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    J'avais cru comprendre que les "/" étaient les marqueurs de début et de fin de l'expression régulière.

    En effet maintenant ça fonctionne, mais dans quel cas les utiliser ? Et pourquoi là ils sont considérés comme des caractères ?

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Ce n'est pas un délimiteur dans la commande expr mais il est vrai que cela peut en être un en sed,perl,awk,...
    Cordialement.

  5. #5
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Ce n'est pas un délimiteur dans la commande expr mais il est vrai que cela peut en être un en sed,perl,awk,...
    Je m'en suis servi pour des sed et des awk, en effet... J'ai généralisé bêtement

    Merci de l'info !

  6. #6
    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,

    pourquoi utiliser expr plutôt que grep, ce sont toutes deux des commandes externes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if echo "$line" | grep -q '<motif>'
    then
    ...
    fi
    NB: les parenthèses exécutent la commande dans un sous-interpréteur, elles ne constituent pas un test.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    J'ai un soucis également avec un awk :

    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
    while read comment
    do
       echo "$comment" | awk '
       /^<!---.*/ { next ;}
       /^-->.*/ { print "last"; next ;}
       /^<.*/ { print $0;}
       ' | read Commentaire
       if [ ! -z ${Commentaire} ]
       then
          echo "${Commentaire}"
          if [ ${Commentaire} = "last" ] ; then break ; fi
             sed '/$derniere_ligne/a $Commentaire\' /exec/applis/09cdvlpt/BASE_TEST/RAPPORTS/test.txt 
             derniere_ligne=${Commentaire} 
          fi
    done < $file
    Commentaire est toujours vide à la sortie du awk. J'ai déjà fait ce style de manip et ça fonctionne... Mais pas là.

    $comment m'affiche bien la bonne chose. Si je met un echo "${Commentaire}" après le read, il est bien vide. J'ai donc un problème dans le awk (RegExp?)

  8. #8
    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
    cela provient du pipe qui s'exécute dans un sous-interpréteur, et qui, donc, ne "transmet" pas la variable à son parent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    commentaire=$(echo "$var" | awk...)
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    Merci en effet ça fonctionne !

    En revanche, je n'arrive pas à faire ce que je souhaite avec mon sed

    Je m'explique, j'ai un fichier qui recense les tests lancés et l'ensemble de mes tests formatés de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <!---
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/> 
    -->
    ////et le code xml
    Pour le fichier rapport des tests :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    MP_0385249173.resultat : Valid
    VAP6_CMD_ACQ_NetN_0001002122_0385262173.resultat : Valid
    TU_RESULT_ad09cap1_TU_G6R1C0.res : Failed
    CMD_newagate_ACQ_NetN__0008537025.resultat : Failed
    CMD_newagate_ACQ_NetN__0008537025_BCS.resultat : Failed
    CMD_newagate_ACQ_NetN__0008537025_FoncS00000000036.resultat : Failed
    CMD_newagate_ACQ_NetN__0008537025_NDIP.resultat : Failed
    CMD_ACQ_Fibre_0001001023_0384674312_D38.resultat : Valid
    CMD_TRF_Fibre_0001001023_0384674312_D38.resultat : Valid
    CMD_ACQ_Fibre_0001001023_0384674312_D38.resultat : Valid
    CMD_TRF_Fibre_0001001023_0384674312_D38.resultat : Valid
    Ce que je souhaite faire, c'est pour chaque ligne, trouver le test correspondant, et ajouter les commentaires xml dessous le nom :


    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    MP_0385249173.resultat : Valid
    <Nom="CMP"/>
    <Description="xxx"/>
    <Deprecie="non"/> 
     
    VAP6_CMD_ACQ_NetN_0001002122_0385262173.resultat : Valid
    <Nom="VAP6"/>
    <Description="xxx"/>
    <Deprecie="non"/> 
     
    TU_RESULT_ad09cap1_TU_G6R1C0.res : Failed
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/> 
     
    CMD_newagate_ACQ_NetN__0008537025.resultat : Failed
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/> 
     
    CMD_newagate_ACQ_NetN__0008537025_BCS.resultat : Failed
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/> 
     
    CMD_newagate_ACQ_NetN__0008537025_FoncS00000000036.resultat : Failed
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/> 
     
    CMD_newagate_ACQ_NetN__0008537025_NDIP.resultat : Failed
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/> 
     
    CMD_ACQ_Fibre_0001001023_0384674312_D38.resultat : Valid
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/> 
     
    CMD_TRF_Fibre_0001001023_0384674312_D38.resultat : Valid
    <Nom="CMD_TRF_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/> 
     
    CMD_ACQ_Fibre_0001001023_0384674312_D38.resultat : Valid
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/> 
     
    CMD_TRF_Fibre_0001001023_0384674312_D38.resultat : Valid
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/>
    Mon soucis est que le fichier n'est pas modifié. J'ai tenté de bidouiller, mais au mieux je me retrouve avec un fichier vide...
    Une idée ?

  10. #10
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    Déjà utiliser awk pour faire ça, je me complique certainement un peu la vie...
    Est-ce suffisant comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while read comment && [[ "$comment" != "-->" ]] 
    do
    	if [[ "$comment" != "<!---" ]] ; then sed ...  ; fi
    done < $file

  11. #11
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Je ne comprends pas comment tu rempli la balise "nom" de ton pseudo xml, donc voici une petite astuce en sed.
    1) le fichier pseudo xml (avec une ligne vide à la fin):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ cat bal.xml 
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/>
     
    $
    le fichier rapport tel que tu le présente:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ cat rapport.txt 
    MP_0385249173.resultat : Valid
    VAP6_CMD_ACQ_NetN_0001002122_0385262173.resultat : Valid
    TU_RESULT_ad09cap1_TU_G6R1C0.res : Failed
    CMD_newagate_ACQ_NetN__0008537025.resultat : Failed
    CMD_newagate_ACQ_NetN__0008537025_BCS.resultat : Failed
    CMD_newagate_ACQ_NetN__0008537025_FoncS00000000036.resultat : Failed
    CMD_newagate_ACQ_NetN__0008537025_NDIP.resultat : Failed
    CMD_ACQ_Fibre_0001001023_0384674312_D38.resultat : Valid
    CMD_TRF_Fibre_0001001023_0384674312_D38.resultat : Valid
    CMD_ACQ_Fibre_0001001023_0384674312_D38.resultat : Valid
    CMD_TRF_Fibre_0001001023_0384674312_D38.resultat : Valid
    et la commande sed pour positionner les balise comme tu le désires:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    $ sed -e 'r bal.xml' rapport.txt 
    MP_0385249173.resultat : Valid
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/>
     
    VAP6_CMD_ACQ_NetN_0001002122_0385262173.resultat : Valid
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/>
     
    TU_RESULT_ad09cap1_TU_G6R1C0.res : Failed
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/>
     
    CMD_newagate_ACQ_NetN__0008537025.resultat : Failed
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/>
     
    CMD_newagate_ACQ_NetN__0008537025_BCS.resultat : Failed
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/>
     
    CMD_newagate_ACQ_NetN__0008537025_FoncS00000000036.resultat : Failed
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/>
     
    CMD_newagate_ACQ_NetN__0008537025_NDIP.resultat : Failed
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/>
     
    CMD_ACQ_Fibre_0001001023_0384674312_D38.resultat : Valid
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/>
     
    CMD_TRF_Fibre_0001001023_0384674312_D38.resultat : Valid
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/>
     
    CMD_ACQ_Fibre_0001001023_0384674312_D38.resultat : Valid
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/>
     
    CMD_TRF_Fibre_0001001023_0384674312_D38.resultat : Valid
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/>
    Et donc reste plus qu'a modifier le "Nom" dans tes balises soit avec une autre commande sed ou avant d'utiliser la commande "r" de sed...
    Cordialement.

  12. #12
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    Bonjour,

    La balise "Nom" est rempli à la création du test. Comme le reste des informations.

    Mon fichier XML où je dois récupérer ces informations se présente de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <!---
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/> 
    -->
    <?xml version="1.0"?>
    <!DOCTYPE Structure SYSTEM "DTD_EFBToNPF.dtd">
    	<Structure>
    	  <StructureTechnique>
    		du blabla
    	  </StructureTechnique>
      <StructureMetier>
    encore du blabla
    Donc ce que je souhaite récupérer est en commentaire au début du fichier xml et est suivi de vrai code xml.
    Je ne souhaite pas récupérer la ligne de début de commentaire (<!---) ainsi que celle de fin (-->), si possible retirer les chevrons (Nom="CMD_ACQ_Fibre"), et ajouter une ligne vide à la fin.

  13. #13
    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,

    Tes 2 fichiers (xml et rapport.txt) sont-ils triés dans le même ordre ?
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  14. #14
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Salut,

    Tes 2 fichiers (xml et rapport.txt) sont-ils triés dans le même ordre ?
    Pas du tout, je parcours un répertoire dans lequel sont stocké mes XML. Et mon rapport contient la liste de ces XML.

    1 ligne de rapport = 1 fichier XML.

    Je consulte donc chaque ligne de mon rapport, je cherche le XML correspondant, je lis les commentaires. En revanche, je n'arrive pas à les ajouter à la suite de la ligne du rapport que j'ai lu.
    Sur des forums j'ai cherché comment utiliser sed pour le faire, mais même en respectant ce qui est marqué, les commentaires ne s'ajoutent pas

  15. #15
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Si tu as gnu sed (support de l'option -r et du switch e pour la commande s), voici un exemple qui prend le fichier rapport et rajoute pour la ligne "VAP6.*" la partie en commentaire de ton fichier 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
    $  sed -e "s/VAP6.*/echo &;sed -n -r '\/<\!--\/,\/-->\/\{\/(-->|<\!--)\/\!p;\}' f1.xml;echo/e" rapport.txt
    MP_0385249173.resultat : Valid
    VAP6_CMD_ACQ_NetN_0001002122_0385262173.resultat : Valid
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/>
     
    TU_RESULT_ad09cap1_TU_G6R1C0.res : Failed
    CMD_newagate_ACQ_NetN__0008537025.resultat : Failed
    CMD_newagate_ACQ_NetN__0008537025_BCS.resultat : Failed
    CMD_newagate_ACQ_NetN__0008537025_FoncS00000000036.resultat : Failed
    CMD_newagate_ACQ_NetN__0008537025_NDIP.resultat : Failed
    CMD_ACQ_Fibre_0001001023_0384674312_D38.resultat : Valid
    CMD_TRF_Fibre_0001001023_0384674312_D38.resultat : Valid
    CMD_ACQ_Fibre_0001001023_0384674312_D38.resultat : Valid
    CMD_TRF_Fibre_0001001023_0384674312_D38.resultat : Valid
    Pour que cela modifie directement ton fichier rapport.txt, il suffit de rajouter l'option "-i" avant le "-e" du premier sed.
    Et ici, les deux partie qui serait a variabiliser sont en rouge:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e "s/VAP6.*/echo &;sed -n -r '\/<\!--\/,\/-->\/\{\/(-->|<\!--)\/\!p;\}' f1.xml;echo/e" rapport.txt
    Si tu utilise ce sed, je te conseille de copier ton fichier rapport.txt, de parcourir ton fichier rapport.txt pour chaque ligne qui te permettra de connaitre le xml, et de modifier la copie de rapport.txt.
    Cordialement.

  16. #16
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    Dieu est contre moi, je n'ai pas l'option -i.

    Y a t-il moyen de faire la même chose sans l'option ?

  17. #17
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    Sans l'option -i j'ai l'erreur suivante :

    sed: Function s/CMD_TRF_Fibre_0001001023_0384674312_D38.*/echo &;sed -n -r '\/<\!--\/,\/-->\/\{\/(-->|<\!--)\/\!p;\}' /exec/applis/09cdvlpt/BASE_TEST/BASETU/TU_kevin/TU_G6R1C3/PUBPARC/CMD_TRF_Fibre_0001001023_0384674312_D38.xml;echo/e cannot be parsed.

  18. #18
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Tu peux laisser tomber ma solution, car si tu n'as pas l'option -i , je doute que tu ais le switch e de la commande s de sed ainsi que l'option -r.

    C'est quoi ton OS et ta version de sed ?
    Cordialement.

  19. #19
    Membre régulier Avatar de nanooby
    Homme Profil pro
    IT Consultant
    Inscrit en
    Mai 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : IT Consultant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2014
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Tu peux laisser tomber ma solution, car si tu n'as pas l'option -i , je doute que tu ais le switch e de la commande s de sed ainsi que l'option -r.

    C'est quoi ton OS et ta version de sed ?
    AIX 5.3

    sed [ -n ] [ -u ] Script [ File ... ]

    sed [ -n ] [ -u ] [ -e Script ] ... [ -f ScriptFile ] ... [ File ... ]


    (2)r RFile
    Reads the contents of the RFile variable. It places contents in output before reading the next input line.

    (2)s/pattern/replacement/flags
    Substitutes the replacement string for the first occurrence of the pattern parameter in the pattern space. Any character that is displayed after the s subcommand can substitute for the /
    (slash) separator except for the space or new-line character.
    See the "Pattern Matching" section of the ed command.
    The value of the flags variable must be zero or more of:
    g
    Substitutes all non-overlapping instances of the pattern parameter rather than just the first one.
    n
    Substitutes for the n-th occurrence only of the pattern parameter.
    p
    Writes the pattern space to standard output if a replacement was made.
    w WFile
    Writes the pattern space to the WFile variable if a replacement was made. Appends the pattern space to the WFile variable. If the WFile variable was not already created by a previous
    write by this sed script, the sed command creates it.

    (2)y/pattern1/pattern2/
    Replaces all occurrences of characters in the pattern1 variable with the corresponding pattern2 characters. The number of characters in the pattern1 and pattern2 variables must be equal. The
    new-line character is represented by \n.

  20. #20
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Voici une alternative qui fonctionne peut-être avec ton sed:
    Partie à faire en dehors de ta boucle (ici, on va travailller sur une copie) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ cp rapport.txt rapport.txt.copy
    Et voici la commande sed + un move pour que la copie soit finalement modifiée:
    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
    $ sed  -e "/VAP6.*/r"<(sed -n -e '/<!--/,/-->/{/<!--/d;s/-->//;p;}' f1.xml) rapport.txt.copy >rapport.txt.work
    $ mv rapport.txt.work rapport.txt.copy 
    $ cat rapport.txt.copy 
    MP_0385249173.resultat : Valid
    VAP6_CMD_ACQ_NetN_0001002122_0385262173.resultat : Valid
    <Nom="CMD_ACQ_Fibre"/>
    <Description="Ce test est pour une acquisition fibre"/>
    <Deprecie="non"/> 
     
    TU_RESULT_ad09cap1_TU_G6R1C0.res : Failed
    CMD_newagate_ACQ_NetN__0008537025.resultat : Failed
    CMD_newagate_ACQ_NetN__0008537025_BCS.resultat : Failed
    CMD_newagate_ACQ_NetN__0008537025_FoncS00000000036.resultat : Failed
    CMD_newagate_ACQ_NetN__0008537025_NDIP.resultat : Failed
    CMD_ACQ_Fibre_0001001023_0384674312_D38.resultat : Valid
    CMD_TRF_Fibre_0001001023_0384674312_D38.resultat : Valid
    CMD_ACQ_Fibre_0001001023_0384674312_D38.resultat : Valid
    CMD_TRF_Fibre_0001001023_0384674312_D38.resultat : Valid
    Si tu obtiens ce résultat, dans ce cas, comme expliqué précédemment, tu variabilises les parties en rouge ci-dessous, et cela devrait le faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ sed  -e "/VAP6.*/r"<(sed -n -e '/<!--/,/-->/{/<!--/d;s/-->//;p;}' f1.xml) rapport.txt.copy >rapport.txt.work
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème expressions régulières
    Par cottcott dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2007, 14h29
  2. Réponses: 3
    Dernier message: 20/04/2007, 14h47
  3. Problème expression régulières
    Par LEK dans le forum C#
    Réponses: 2
    Dernier message: 18/04/2007, 11h40
  4. [RegEx] problème expression régulière
    Par H-bil dans le forum Langage
    Réponses: 4
    Dernier message: 13/02/2007, 15h38
  5. Problème expressions régulières
    Par sozie9372 dans le forum Langage
    Réponses: 3
    Dernier message: 07/06/2006, 15h13

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