[shell] Récupérer certains caractère

Résolu
tomk41 -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je tente de récupérer certains carartères à l'intérieur d'une chaine mais mes connaissances sont loin d'être suffisantes.

Exemple :
myvar = abc_def_ghi

echo ${myvar%%_*} renvoie "abc".
echo ${myvar##*_} renvoie "ghi".

Mais j'aimerais également récupérer uniquement "def" ?
Configuration: Windows XP
Firefox 2.0.0.3

2 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,
     expr "$myvar" : ".*_\(.*\)_.*"
    ;-)
    0
    1. tomk41 Messages postés 12 Statut Membre
       
      Magnifique :-)
      Merci beaucoup !!
      0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    En s'inspirant de ta méthode
    #!/bin/bash
    export myvar="abc_def_ghi"
    
    # le pitch : utiliser # et % au lieu de ## et %%
    echo "myvar#*_  ${myvar#*_}"
    echo "myvar%_*  ${myvar%_*}"
    
    # la solution :
    plop=${myvar%_*}
    echo ${plop#*_}

    Autre méthode, avec une expression régulière (c'est plus la classe)
    echo ${my_var} | sed 's/.*_\(.*?\)_.*/\1/'

    Bonne chance
    0