[SHELL] afficher valeur d'une ligne

Résolu/Fermé
magicwill Messages postés 93 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 10 juillet 2008 - 17 août 2007 à 11:45
magicwill Messages postés 93 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 10 juillet 2008 - 17 août 2007 à 14:01
Bonjour,

Le sujet n'est pas tres explicite, mais voici des explications:

Supposons que dans la variable ligne j'ai:
[echo $ligne]

"coucou" VAR2=44 VAR5=TEST SRV=BEAU


mais je peux avoir aussi les champs qui changent de places... par exemple dans $ligne:

"coucou" SRV=BEAU VAR2=44 VAR5=TEST 


Je cherche par exemple à recuperer la valeur de VAR2 , en gros recuperer 44... mais je vois pas trop comment faire, si ce n'est une boucle for sur chaque mot et faire un grep pour verifier qu'il est pas vide ( grep VAR2), et ensuite recuperer valeur 44...

Il y a pas un moyen d'utiliser awk ou sed?...enfin, je sais pas... J'ai pas d'idée pour recuperer ma valeur sachant que je sais pas où elle est dans $ligne... La boucle for dessus, ca fait lourd...

Merci pour vos suggestions.
A voir également:

6 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
17 août 2007 à 11:55
Salut,
echo "coucou SRV=BEAU VAR2=44 VAR5=TEST" | grep -o "VAR2=.* " | cut -d = -f2
;-))
0
magicwill Messages postés 93 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 10 juillet 2008 3
17 août 2007 à 12:13
Arf...l'option -o n'existe pas dans l'environnement dans lequel je travaille...

je fais grep -o test fic, et il me dit grep: illegal option -- o
je fais man grep...l'option -o n'existe pas!!!!
C'est un genre de unix que j'ai je pense...

Ouin...je fondait tout mes espoirs sur ta commande!!! Effectivement, ca marche mais ailleurs quoi...

Des idées?

ps: voila ce qui veint apres illegal blabla

usage: grep [-E|-F] [-c|-l|-q] [-insvxbhwy] [-p[parasep]] -e pattern_list...
        [-f pattern_file...] [file...]
usage: grep [-E|-F] [-c|-l|-q] [-insvxbhwy] [-p[parasep]] [-e pattern_list...]
        -f pattern_file... [file...]
usage: grep [-E|-F] [-c|-l|-q] [-insvxbhwy] [-p[parasep]] pattern_list [file...]
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
17 août 2007 à 13:01
Salut,

je n'ai pas testé
echo "coucou SRV=BEAU VAR2=44 VAR5=TEST" | cut -d" " -f3 | cut -d = -f2
--
lami20j
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
17 août 2007 à 13:08
Salut lami20j,

Je cite magicwill dans son 1er post : "mais je peux avoir aussi les champs qui changent de places... par exemple dans $ligne :..."

;-((

Par contre essaie ça :
echo "coucou SRV=BEAU VAR2=44 VAR5=TEST" | sed 's/.*VAR2=\([^ ]* \).*/\1/'
Ça devrait le faire :-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
17 août 2007 à 13:18
Salut,

ben, alors, qu'ils ne changent pas leur place !!!
:-DDDDD
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 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
17 août 2007 à 13:19
;-)))
0
magicwill Messages postés 93 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 10 juillet 2008 3
17 août 2007 à 13:32
salut... j'ai lu ta proposition jipicy...

J'ai essayé mais ca a pas l'air de le faire...
Je pense faire quelque chose comme ton sed...
Par contre, j'ai un peu de mal a comprendre chaque partie de ton sed...
sed 's/.*VAR2=\([^ ]* \).*/\1/'

Surtout explique le chapeau etoile [^ ]*

J'avoue, suis pas un pro...Mais voila ce que j'ai trouvé, apres avoir lu ce que tu as fait + un peu de net...
Et ca m'affiche VAR2=
ID=`echo $ligne | sed -n 's/.*\(VAR2=\).*/\1/p' `
echo $ID


Je pense que je dois mettre qq part une regexp pour dire des chiffres... ou regexp pour des lettres..mais alors je suis pas trop doué... de l'aide encore svp...

Merci deja pour vos suggestions...
0
magicwill Messages postés 93 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 10 juillet 2008 3
17 août 2007 à 13:41
Ca y est!!!

Trouvé!!

ID=`echo $ligne | sed -n 's/.*\(VAR2=[0-9]*\).*/\1/p' | cut -d"=" -f2`


Par contre, faut encore que je trouve la regexp pour exprimer lettre et chiffre melangées...

Merci à vous!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
17 août 2007 à 13:45
[tmpfs]$ VAR=$(echo "coucou SRV=BEAU VAR2=44 VAR5=TEST" | sed 's/.*VAR2=\([^ ]* \).*/\1/')

[tmpfs]$ echo $VAR
44

[tmpfs]$
Chez moi ça marche ;-\

Sinon le "chapeau espace" comme tu dis c'est pour empêcher la gloutonnerie des regex. Si on omet cette partie dans la regex -qui dit en substance de prendre tout ce qu'il y a derrière le signe égale jusqu'à ce qu'on rencontre un espace (note bien l'espace derrière l'astérisque)- elle englobera tous les espaces restant jusqu'au dernier et de ce fait matchera le restant de la ligne. De cette façon elle s'arrête au 1er espace rencontré.
0
magicwill Messages postés 93 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 10 juillet 2008 3
17 août 2007 à 14:01
Effectivement ca marche jipicy!!!!
Merci merci!!

Je sais pas pourquoi, mais quand j'ai testé tout à l'heure, ca marchait pas...ptetre un espace...

Merci pour tes explications, je ne connaissais pas..

Bon, ben suis sauvé!
Merci merci!
0