Parcour fichier et arret a la 1ere occurence

Résolu
evita8 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -  
evita8 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -
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 !
A voir également:

4 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,
#! /bin/bash

grep -m 1 "^<xsd:element" $1
if [ $? = 1 ]; then
        echo "Pas trouvé"
fi
;-))
1
evita8 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
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
evita8 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
evita8 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   > 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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
Et directement depuis le shell, ça marche ou pas ?
0
evita8 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   > 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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > 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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
evita8 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
<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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > evita8 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
echo $ligne | cut -f2 -d '"' 
;-))
0
evita8 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   > 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
evita8 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
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