Parcour fichier et arret a la 1ere occurence

Résolu
evita8 Messages postés 32 Statut Membre -  
evita8 Messages postés 32 Statut Membre -
Bonjour,

J'essaye de parcourir un fichier XSD ligne par ligne et de récupérer le nom de l'élément racine.
Dans le fichier XSD, voici la déclaration de l'élément racine :
<xsd:element name="Blabla" type="Blabla"/>

Que pensez vous de ma méthode :
- Parcourt du fichier avec une boucle while
- Test de la ligne en cour : verifier si elle est du type <xsd:element name="Blabla" type="Blabla"/>
- Arrêt a la premiere ocurence rencontrée (puisqu'il peut y avoir d'autre lignes commençant par "<xsd:element")

Mon script :

while read line
do
if [ "grep '^<xsd:element'" ] ; then
echo "$line"
else
echo "pas trouve"
fi
done < fichier.xsd

Problème : lors de l'execution le script recrache toutes les lignes du fichier XSD et non pas juste celles qui commencent par "<xsd:element"

Et comment faire pour arrêter la boucle des qu'une ligne contient "<xsd:element" ?

Merci !

4 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,
    #! /bin/bash
    
    grep -m 1 "^<xsd:element" $1
    if [ $? = 1 ]; then
            echo "Pas trouvé"
    fi
    ;-))
    1
    1. evita8 Messages postés 32 Statut Membre
       
      C'était simple en fait, merci !
      J'ai mis la ligne trouvée dans la variable $ligne

      Pour réccupérer le "Blabla", j'ai rajouté :
      var=$(cut -f2 -d '"' <<< $ligne)

      echo $var me donne :
      var=Blabla

      Merci !
      0
  2. evita8 Messages postés 32 Statut Membre
     
    Hello !

    La ligne de commande que tu m'as donné la dernière fois (recherche de la premiere occurence d'un motif dans un fichier : grep -m 1 " ^<xsd:element" $1) fonctionne trés bien chez moi mais sur l'odinateur de l'ecole je lis une erreure :
    grep: option invalide -- m

    Aurai tu une autre solution a mon problème ?

    Merci !
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Re-

      Ben déjà regarde le "man grep" pour voir les options disponibles (ou grep --help) et la version (grep --version).

      Sinon essaye avec :
      sed -n '/^<xsd:element/{p;q}' fichier
      ;-))
      0
      1. evita8 Messages postés 32 Statut Membre > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Je n'arrive pas à recuperer ma ligne... Je ne vois pas du tout le problème !
        pourtant la fonction "-n" existe sur cette version de unix (j'ai verifié dans le man)

        ligne=$(sed -n '/<xsd:element/{p;q}' data/$2)

        Le message d'erreur qu'il me renvoie :
        sed: -e expression #1, char 19: Extra characters after command
        0
      2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Et directement depuis le shell, ça marche ou pas ?
        0
      3. evita8 Messages postés 32 Statut Membre > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Directement depuis le shell, je rentre

        sed -n '/<xsd:element/{p;q}' data/fichier.xsd

        Il me met la meme erreur
        0
      4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Commence par enlever le "q" à la fin (et les accolades) et vois si ça marche comme ça.

        Si ça marche, essaie :
        sed -n '0,/<xsd:element/{/<xsd:element/p}' data/fichier.xsd 
        ;-)
        0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Commence par enlever le "q" à la fin et vois si ça marche comme ça.

    Si ça marche, essaie :
    sed -n '0,/<xsd:element/{/<xsd:element/p}' data/fichier.xsd 
    ;-)

    0
    1. evita8 Messages postés 32 Statut Membre
       
      <xsd:element name="Bibliotheque" type="Bibliotheque"/>

      De cette ligne, je voudrai recuperer le nom Bibliotheque

      Ma ligne (qui marchait chez moi mais ne fonctionne plus a l'ecole...) :
      RACINE=$(cut -f2 -d '"' <<< $ligne) ne fonctionne plus

      Il me renvoie :
      tp4.sh: command substitution: line 1: syntax error near unexpected token `<<<'
      tp4.sh: command substitution: line 1: `cut -f2 -d '"' <<< $ligne'

      J'ai aussi essayé :

      $ligne | cut -f2 -d '"'

      Mais ça ne marche pas non plus

      need help!
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > evita8 Messages postés 32 Statut Membre
         
        echo $ligne | cut -f2 -d '"' 
        ;-))
        0
      2. evita8 Messages postés 32 Statut Membre > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Thanks a lot !
        Ce sont des questions basiques mais là je panique a cause de tte ces erreures !
        0
  4. evita8 Messages postés 32 Statut Membre
     
    C'est bon, en enlevant "q" et les accollades la ligne fonctionne !! Merci beaucoup jipicy !!

    J'ai encore enormément d'erreurs dans mon script... Je ne savais pas qu'il y avait autant de pb de portabilité sous unix
    0