Sed "s/.*\([0-9][0-9]*\).*/ resultat = \1/&qu

Mickael -  
 mickael3905 -
Bonjour,

Je cherche à isoler un nombre dans une chaîne de caractères avec la fonction sed (j'appliquerai ensuite cette méthode à un fichier de dépouillement de résultats). J'y suis presqu'arrivé mais je suis bloqué. Dans l'exemple ci-dessous, j'obtient résulat = 8 au lieu de résultat = 158.

chaine de départ ejkf fed 158e fd
commande s/.*\([0-9][0-9]*\).*/ resultat = \1/
resultat resultat = 158

Si quelqu'un pouvait m'indiquer ou est mon erreur, ça me rendrait bien service.

Merci d'avance pour vos réponses.

Mickaël

3 réponses

  1. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
     
    Salut, il en faudrait unpeut plus pour trouver une expression réguliére qui match bien ce que tu souhaites

    Y a t-il toujours qu'un seul nombre par chaine ?
    est-ce que le caractére précédent le nombre est identifiable dans tout les cas (espace ?) idem pour la fin

    ceci fonctionne, dans le cas donné, mais par forcément dans tout les cas que tu auras.
    sed 's/.*[^0-9]\([0-9]\+\).*$/ resultat = \1/'
    ce qui précéde ton nombre (directement sans espace) ne peut etre numérique [^0-9]
    0
  2. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
     
    Salut,
    Alors récapitulons, tu cherches

    .*\([0-9][0-9]*\).*

    Elle a une drôle de tête ta regexp, pourquoi pas s/[^0-9]//g tout simplement?
    0
  3. mickael3905
     
    Merci beaucoup pour vos réponses.

    Je n'avais pas pensé à la solution évoquée par teebo, je crois que c'est la plus simple quand même et celle qui me convient le mieux.

    Mickaël
    0