[bash] Position d'un mot ds un fichier

Résolu
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.
Configuration: Linux
Firefox 2.0.0.11

6 réponses

  1. 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
    1. 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
      1. 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
    2. Yes ! Merci beaucoup, c'est peut-être laid mais en effet c'est exactement ce que je voulais ! Quelle rapidité ! Merci beaucoup !
      0
      1. 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
    3. Modérateur
      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
      1. 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
        1. Modérateur
          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

          Discussions similaires

          question pix mot caché

          7 réponses