Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications
Applications Questions sur l'utilisation d'applications, du shell, et des interfaces graphiques (KDE, Gnome, XFCE... )
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/12/2011, 21h28   #1
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 116
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 116
Points : 26
Points : 26
Par défaut bash, grep, retour de cmd

Voulant faire bien les choses, et surtout après mettre fait taper sur les doigts (je vous en remercie), j'essaie de faire "proprement" la chose suivante :

dans un fichier, j'aimerais chercher une occurrence du type : toto=QUelquechose. Et si il y a, mettre ce qu'il y a après le = dans une variable.
J'ai pensé à faire un grep de l’occurrence et ensuite un awk pour récupérer, mais je me demande si il n'y aurait pas plus élégant.

Par exemple,
Code :
1
2
3
4
5
if grep $occurence
 then "récupérer la ligne de retour de grep(la réponse),faire un traitement du genre tr "=" " "  et ensuite affecter à $valeur le $2" 
Else
 echo "Aucune occurrence trouvé ..."
fi
Mais dans la pratique, je ne vois pas trop comment récupérer la réponse de grep (pas le $?). Sans faire de test, j'ai bien une idée, mais je plante quand je veux mettre un if ...

Je suis un peu perdu, si vous avez des idées ...
Nelmo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/12/2011, 07h48   #2
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 072
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 072
Points : 4 155
Points : 4 155
Bonjour,

Citation:
récupérer la ligne, faire un traitement
ça, c'est pour sed, ou awk; eventuellement grep -o :
Code :
1
2
grep --help | grep -- '^ *-o'
  -o, --only-matching       show only the part of a line matching PATTERN
Citation:
ensuite affecter à $valeur le $2
tu peux développer …
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 16/12/2011, 16h38   #3
Membre Expert
 
Homme
Ingénieur développement logiciels
Inscription : octobre 2008
Messages : 1 378
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : octobre 2008
Messages : 1 378
Points : 2 040
Points : 2 040
Quelque chose du genre :
Code :
var=`awk -F= '/^toto=/ { print $2 }' filename`
matafan est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/12/2011, 10h21   #4
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 116
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 116
Points : 26
Points : 26
Merci pour vos réponses, de retour de voyage, je fais le point ce jour et vous dit quoi. Merci
Nelmo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2011, 12h24   #5
Candidat au titre de Membre du Club
 
Homme
Epitech
Inscription : juillet 2010
Messages : 11
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Epitech

Informations forums :
Inscription : juillet 2010
Messages : 11
Points : 10
Points : 10
Salut,

Pour avoir quelque chose de plus flexible, j'aurais plus fait ceci:

Code :
1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
 
results=$( grep -Eo '.[[:alnum:]]*=[[:alnum:]]*' filename )
 
for i in $results
do
        name=${i%=*}
        value=${i#*=}
 
        echo $name" = "$value
done
Bellagio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 10h33   #6
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 116
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 116
Points : 26
Points : 26
Merci, j'ai pu trouver mon bonheur, la forme de Bellagio s'est bien intégré à mon idée. Cependant, je n'ai pas bien compris le passage suivant :
Code :
1
2
name=${i%=*}
        value=${i#*=}
J'ai bien vu le résultat, mais j'ai pas compris la forme, est-ce en fonction de la regex du haut ? Peux-tu me proposer des liens vers un tuto ou une explication de façon a ce que je comprennes le truc ?
Merci
Nelmo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 16h59   #7
Candidat au titre de Membre du Club
 
Homme
Epitech
Inscription : juillet 2010
Messages : 11
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Epitech

Informations forums :
Inscription : juillet 2010
Messages : 11
Points : 10
Points : 10
Citation:
Envoyé par Nelmo Voir le message
Merci, j'ai pu trouver mon bonheur, la forme de Bellagio s'est bien intégré à mon idée. Cependant, je n'ai pas bien compris le passage suivant :
Code :
1
2
name=${i%=*}
        value=${i#*=}
J'ai bien vu le résultat, mais j'ai pas compris la forme, est-ce en fonction de la regex du haut ? Peux-tu me proposer des liens vers un tuto ou une explication de façon a ce que je comprennes le truc ?
Merci
Ce sont les "substrings" gérées par bash, si ça peut t'aider:
http://tldp.org/LDP/abs/html/string-manipulation.html

En fait, dans un premier temps je récupère tous les résultats qui matchent avec *=*.
Ensuite je fais une itération sur le tableau, pour récupérer les résultats un par un.
Et pour finir je récupère ce qu'il y avant et après le '=' avec les "substrings"
Bellagio est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h22.


 
 
 
 
Partenaires

Hébergement Web