IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

sed - occurences d'un modèle dans un string


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 39
    Par défaut sed - occurences d'un modèle dans un string
    Bonjour,

    J'aimerais récupérer les différentes itérations d'un certain modèle dans un string.
    Par exemple, si on a le string suivant :

    voicimonString[iteration1]etpuis[iteration2]et[iteration3]etenfin[iteration4]

    A ce moment précis, je sais récupérer "itération4" en faisant par example:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    str="voicimonString[iteration1]etpuis[iteration2]et[iteration3]etenfin[iteration4]"
    echo "$str" | sed -e 's/\(^.*\[\)\(.*\)\(\].*$\)/\2/'
    mais je ne sais pas comment faire pour récupérer "iteration2" ?

    Un grand merci d'avance à celui qui saura m'éclairer

  2. #2
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "$str" | sed "s/[^[]*\[[^]]*][^[]*\[\([^]]*\).*/\1/"
    La partie suivante prend en compte tout les caractères autre que "["
    Il suffit de le faire aussi pour le "]" et de reproduire cette opération plusieurs fois pour récupérer l’occurrence que tu souhaites.

    Si dans ton exemple on avait en plus un iteration5 tu l'aurais récupéré à la place de iteration4 car sed est gourmand avec les .*
    Il prend un maximum de caractère qui correspondent à chaque fois.
    Si tu ne voulais que la dernière itération, la commande suivante est plus simple que celle que tu as indiqué.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    str="voicimonString[iteration1]etpuis[iteration2]et[iteration3]etenfin[iteration4]"
    echo "$str" | sed "s/.*\[\(.*\)\].*/\1/"

  3. #3
    Membre averti
    Inscrit en
    Décembre 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 39
    Par défaut
    Ok.

    J'ai mis un petit moment pour comprendre mais c'est nickel.
    Un grand merci pour la rapidité et la clarté de la réponse

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par slig_80 Voir le message
    Bonjour,

    J'aimerais récupérer les différentes itérations d'un certain modèle dans un string.
    Par exemple, si on a le string suivant :

    voicimonString[iteration1]etpuis[iteration2]et[iteration3]etenfin[iteration4]

    mais je ne sais pas comment faire pour récupérer "iteration2" ?
    Personnellement et en ce qui me concerne moi-même en personne, j'opterais pour cut afin de favoriser la lisibilité et la généricité, quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function get_nth {
        typeset -i nth=$1
        typeset str=$2
        typeset sub=$(echo "${str}" | cut -d'[' -f${nth})
        echo "${sub%%\]*}"
    }
     
    my_str=voicimonString[iteration1]etpuis[iteration2]et[iteration3]etenfin[iteration4]
    for i in 2 3 4 5 ; do echo "$i: $(get_nth $i "my_str")"; done
    2: iteration1
    3: iteration2
    4: iteration3
    5: iteration4

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Bonjour,
    Juste pour le fun:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ my_str="voicimonString[iteration1]etpuis[iteration2]et[iteration3]etenfin[iteration4]"
    $ echo $my_str | tr '\]' '\n' |cut -d\[ -f2
    iteration1
    iteration2
    iteration3
    iteration4
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. compter nombre d'occurence dans un String
    Par L4BiN dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 24/11/2011, 01h25
  2. Réponses: 6
    Dernier message: 14/08/2011, 15h37
  3. [bash] récupérer la première occurence d'une série de digits dans une string
    Par Sherwood51 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 21/05/2011, 16h17
  4. Réponses: 19
    Dernier message: 25/04/2009, 19h41
  5. [AS] Nombre d'occurences dans une string
    Par frol dans le forum Flash
    Réponses: 3
    Dernier message: 26/12/2005, 15h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo