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 :

Rechercher une balise XML avec grep


Sujet :

Shell et commandes GNU

  1. #1
    Débutant  
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 346
    Points : 86
    Points
    86
    Par défaut Rechercher une balise XML avec grep
    Je veux chercher dans un fichier XML : XMLFichier cette balise et savoir le nombre des lignes contenant cet information
    <nom>Test1</nom>
    J’utilise ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    existe_BaliseNom=` grep –c  "<nom>Test1</nom>"  XMLFichier`
    	if [ "$existe_BaliseNom" -gt 0 ]
       	then      
       	echo "Il existe $existe_BaliseNom  fois"
       	fi
    Mais j’ai tjs « 0 », c a d l’élément not existe, est ce que vous avez une idée ?

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    Par défaut
    Bonjour,

    peux-tu montrer l'échantillon de ton fichier qui contient cette balise ?

  3. #3
    Débutant  
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 346
    Points : 86
    Points
    86
    Par défaut
    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
    <?xml version="1.0" encoding="utf-16"?>
    <ecole>
    <etudiant>
     
      <nom>test</nom>
     
      <prenom>test</prenom>
     
      <niveau>test1</niveau>
     
    </etudiant>
     
    <etudiant>
     
     <nom>Test1</nom>
     
      <prenom>test</prenom>
     
      <niveau>test1</niveau>
     
    </etudiant>
    <etudiant>
     
      <nom>Test1</nom>
     
      <prenom>pr</prenom>
     
      <niveau>ni</niveau>
     
    </etudiant>
    </ecole>
    sachant que le code de recherche existe au fichier.ksh
    Vous avez une idée, est ce que j ai mal utilise grep, car malgré qu il existe <nom>Test1</nom> 2 fois, il m affiche 0?

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    Par défaut
    Alors là! Il y a un bug que tu aurais pu chercher longtemps.
    Je ne sais pas où tu as récupéré ton tiret mais ce n'est pas le bon tiret. Le tien est long alors que le tiret usuel est court.

    Pour te le prouver regarde ma console:
    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
    $ grep –c '<nom>Test1</nom>' /tmp/cuicui.txt 
    grep: <nom>Test1</nom>: Aucun fichier ou dossier de ce type
    $ grep '<nom>Test1</nom>' /tmp/cuicui.txt 
     <nom>Test1</nom>
      <nom>Test1</nom>
    $ grep -c '<nom>Test1</nom>' /tmp/cuicui.txt 
    2
    $ echo grep –c  "<nom>Test1</nom>"  XMLFichier |od -c
    0000000   g   r   e   p     342 200 223   c       <   n   o   m   >   T
    0000020   e   s   t   1   <   /   n   o   m   >       X   M   L   F   i
    0000040   c   h   i   e   r  \n
    0000046
    $ echo grep -c  "<nom>Test1</nom>"  XMLFichier |od -c
    0000000   g   r   e   p       -   c       <   n   o   m   >   T   e   s
    0000020   t   1   <   /   n   o   m   >       X   M   L   F   i   c   h
    0000040   i   e   r  \n
    0000044
    $ echo grep -c  "<nom>Test1</nom>"  XMLFichier |od -x
    0000000 7267 7065 2d20 2063 6e3c 6d6f 543e 7365
    0000020 3174 2f3c 6f6e 3e6d 5820 4c4d 6946 6863
    0000040 6569 0a72
    0000044
    Tu as un tiret codé par 342 200 223 au lieu d'avoir le tiret codé par 45 (2d en hexadécimal).

    Bonne chance

  5. #5
    Débutant  
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 346
    Points : 86
    Points
    86
    Par défaut
    Merci pour ta réponse

    Mais j'essaye '<nom>Test1</nom>' et tjs je n'ai pas un résultat
    Sachant voici la MAJ de mon code final car les fichiers existant dans un reprtoire rep
    Le prb n est pas au tiret, car j ai essayé grep test_grep toute seule et aussi je n'ai pas un résultat ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    for fichier in `ls rep`
     do
    	echo "Traitement de recherche"
     
    existe_BaliseNom =` grep –c  ‘<nom>Test1</nom>"rep/$fichier"`
    $test_grep =`grep "<nom>Test1</nom>" "rep/$fichier"`
     
    echo "$test_grep"
    	if [ "$existe_BaliseNom" -gt 0 ]
       	then      
       	echo "Il existe $existe_BaliseNom  fois"
    fi
    done
    Vous avez une idée?

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    Par défaut
    ce n'est pas le bon tiret. Le tien est long alors que le tiret usuel est court.

  7. #7
    Débutant  
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 346
    Points : 86
    Points
    86
    Par défaut
    Merci pour tes réponses, mais j ai fait un copier coller pour grep -c et j ai tjs même erreur
    Sachant que j'ai tjs même prb avec grep seul sans tiret
    J ai mis à jour mon code merci de le voir (peut être chemin de répertoire ou bien "" )

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    Par défaut
    Et les apostrophes à la place des quotes, c'est quoi ?

  9. #9
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 309
    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 309
    Points : 12 817
    Points
    12 817
    Par défaut
    Bonjour,

    Le premier code était mieux fait, le deuxième est plein d'erreur:
    Mauvaise syntaxe:
    Bonne syntaxe:
    le motif de ton grep est encadré par des quote et back quote, grep ne sait pas les interpréter, donc choisi soit les guillemet (ascii) ou quote (ascii), idem pour le fameux '-'.

    Sinon, essayons de résoudre ton problème de grep, donc donne nous le résultat de la commande suivante:
    Comme je ne connais pas le nom de ton fichier xml qui contient ta fameuse balise, je l'appelerais fichier.xml.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep '<nom>Test1</nom>' fichier.xml
    Peux-tu aussi nous dire sur quel OS tu lances tes commandes et comment tu saisis ton code (avec quel éditeur) ?

  10. #10
    Débutant  
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 346
    Points : 86
    Points
    86
    Par défaut
    Merci, pour tes aides et réponses
    Je travaille par eclipse comme Editeur, pour Shell "ksh"
    Vous savez au niveau de mon console, j'ai fait cette commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep '<nom>Test1</nom>' fichier.xml
    ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep "<nom>Test1</nom>" fichier.xml
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep 'Test1' fichier.xml
    ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep "Test1" fichier.xml
    je n'ai aucun résulat et quand je lance (une seule lettre)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -c 'T' fichier.xml
    ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     grep -c "T" fichier.xml
    ou bien J'ai le nbre de fois
    J ai supprimé cette ligne de mon fichier XML <?xml version="1.0" encoding="utf-16"?> et grep fonctionne bien
    Est ce que vous avez une idée, est ce que je dois optimiser ma recherche ?

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    Par défaut
    Citation Envoyé par sonia5 Voir le message
    J ai supprimé cette ligne de mon fichier XML <?xml version="1.0" encoding="utf-16"?> et grep fonctionne bien
    Ça, c'est du vaudou, pas de l'informatique.

    Citation Envoyé par sonia5 Voir le message
    Est ce que vous avez une idée, est ce que je dois optimiser ma recherche ?
    Comme on ne sait même pas ce que tu cherches, ni le critère d'optimisation, ce sera difficile de t'aider. Peux-tu préciser?

  12. #12
    Débutant  
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 346
    Points : 86
    Points
    86
    Par défaut
    Je veux dire par optimiser ma recherche par exemple d utilser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep "<nom>Test1<" fichier.xml
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep "<nom>Test1</nom>" fichier.xml
    ou bien ajouter -i

    Peut etre / provoque des prb, mais ce que m étonne pourquoi la recherche se passe bien pour un XML ne contient pas
    <?xml version="1.0" encoding="utf-16"?>

    Vous avez des idées ?

Discussions similaires

  1. [JDOM] Récupérer le nom d'une balise XML avec JDOM
    Par cendrine15 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 10/04/2012, 15h18
  2. Repérer une balise XML dans une archive : problème avec zipgrep
    Par VforVincent dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 29/06/2011, 15h34
  3. Comment récupérer le nom d'une balise XML avec DOM ?
    Par Predatorus26 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 28/05/2010, 15h54
  4. Comment générer une balise XML globale avec COBOL ?
    Par Phil_phg dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 17/10/2007, 09h25

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