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

Résolu
tomk41 -  
mamiemando Messages postés 34184 Statut Modérateur -
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" ?
A voir également:

2 réponses

jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,
 expr "$myvar" : ".*_\(.*\)_.*"
;-)
0
tomk41 Messages postés 12 Statut Membre
 
Magnifique :-)
Merci beaucoup !!
0
mamiemando Messages postés 34184 Statut Modérateur 7 888
 
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