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

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

2 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,
 expr "$myvar" : ".*_\(.*\)_.*"
;-)
0
tomk41 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Magnifique :-)
Merci beaucoup !!
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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