Parcour fichier et arret a la 1ere occurence

Résolu/Fermé
evita8 Messages postés 32 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 26 mai 2008 - 27 mars 2008 à 18:23
evita8 Messages postés 32 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 26 mai 2008 - 31 mars 2008 à 19:57
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
27 mars 2008 à 18:56
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 jeudi 27 mars 2008 Statut Membre Dernière intervention 26 mai 2008
27 mars 2008 à 20:22
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 jeudi 27 mars 2008 Statut Membre Dernière intervention 26 mai 2008
31 mars 2008 à 17:40
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
31 mars 2008 à 17:48
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 jeudi 27 mars 2008 Statut Membre Dernière intervention 26 mai 2008 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
31 mars 2008 à 18:38
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
31 mars 2008 à 18:49
Et directement depuis le shell, ça marche ou pas ?
0
evita8 Messages postés 32 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 26 mai 2008 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
31 mars 2008 à 18:58
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
31 mars 2008 à 19:06
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
31 mars 2008 à 19:14
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 jeudi 27 mars 2008 Statut Membre Dernière intervention 26 mai 2008
31 mars 2008 à 19:45
<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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > evita8 Messages postés 32 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 26 mai 2008
31 mars 2008 à 19:50
echo $ligne | cut -f2 -d '"' 
;-))
0
evita8 Messages postés 32 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 26 mai 2008 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
31 mars 2008 à 19:57
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 jeudi 27 mars 2008 Statut Membre Dernière intervention 26 mai 2008
31 mars 2008 à 19:27
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