[bash] Position d'un mot ds un fichier

Résolu
tibofx Messages postés 14 Statut Membre -  
jipicy Messages postés 41342 Statut Modérateur -
Bonjour,
Je viens de passer pas mal de temps à écrémer les forums, mais je ne trouve pas de réponse à mon problème..que voici :
J'ai un fichier texte contenant un texte de la forme suivante :
windows 2 sun 1 descendent 5 ...fire 1... etc..
Et ce que je voudrais, c'est que si je cherche un mot, afficher le nombre qui le suit. Par exemple, ici : je cherche le mot "fire". Il est présent, donc j'affiche le nombre qui le suit, soit le 1.
Merci pour votre aide !
Tibo.
A voir également:

6 réponses

Darkito Messages postés 1191 Date d'inscription   Statut Membre Dernière intervention   545
 
Bonjour,
tu peux essayer en faisant un grep "tonMot" pour récupérer la ligne.
ensuite tu reconnait "tonMot" et tu prends le mot suivant.

ligne=`grep "$tonMot" tonFichier | head -1` //tu récupères la 1ere occurence

res=${ligne##*$tonMot } //tu supprimes le début de la ligne, le premier mot est alors le chiffre que tu cherche

set $(echo $res $1)
res=$(eval echo $1) // tu récupères le 1er mot

echo $res


C'est vraiment laid mais ca fonctionne...
--
Tøƒ
0
tibofx Messages postés 14 Statut Membre
 
Merci pour ta réponse si rapide ! Cependant lors de la dernière assignation de la variable res, je suppose qu eça me coupe tout le contenu de res puisqu'ensuite il ne m'affiche absolument rien, ou plutot comme si c'était un retour chariot lorsque je j'affiche sa valeur.
0
Darkito Messages postés 1191 Date d'inscription   Statut Membre Dernière intervention   545
 
Il manquait un "$" devant "tonMot" dans le grep, l'erreur vient peut être de là...
sinon, rajoute des "echo $ligne", "echo $res" pour voir le processus.
--
Tøƒ
0
tibofx Messages postés 14 Statut Membre
 
Yes ! Merci beaucoup, c'est peut-être laid mais en effet c'est exactement ce que je voulais ! Quelle rapidité ! Merci beaucoup !
0
Darkito Messages postés 1191 Date d'inscription   Statut Membre Dernière intervention   545
 
De rien,
Tu as eu de la chance, je suis en plein en train d'utiliser des fonctions de ce genre donc j'avais tous ce qu'il fallait sous la main.
--
Tøƒ
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

Un peu à la bourre, mais... (Attention : Il ne faut pas d'espace entre les 2 premiers crochets ([) qui entourent le terme "digit" !!! Ici l'espace c'est pour contrer la mise en forme des balises < code > qui empêche un affichage correct (réservé) :
$ echo $A
windows 2 sun 1 descendent 5 ...fire 1...

$ echo $A | grep -o "fire [0-9][0-9]*" | grep -o '[ [:digit:]]'
1

$ echo $A | egrep -o "windows [0-9][0-9]*" | grep -o '[ [:digit:]]'
2
;-))
0

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

Posez votre question
tibofx Messages postés 14 Statut Membre
 
Merci jipicy, c'est jamais trop tard pour apprendre ! Je ne suis pas encore sorti de l'auberge, donc tout est bon à prendre pour moi ! Merci encore j'ai vraiment besoin d'avancer dans ce domaine !
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Un petit exemple supplémentaire avec "sed" cette fois :
$ echo "$A"
windows 2 sun 1 descendent 5 ...fire 1...
linux 6 bsd 4 aix 1 mac 3
firefox 2 thunderbird 1 sunbird 2

$ echo "$A" | sed -n '/.*fire \([0-9]\{1,\}\).*/ s//\1/p'
1

$ echo "$A" | sed -n '/.*linux \([0-9]\{1,\}\).*/ s//\1/p'
6

$ echo "$A" | sed -n '/.*bsd \([0-9]\{1,\}\).*/ s//\1/p'
4
;-))
0