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

Résolu
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. Modérateur
    Salut,
     expr "$myvar" : ".*_\(.*\)_.*"
    ;-)
    0
    1. Magnifique :-)
      Merci beaucoup !!
      0
  2. Modérateur
    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