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

Résolu/Fermé
tomk41 - 18 avril 2007 à 15:39
mamiemando Messages postés 33367 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 19 novembre 2024 - 18 avril 2007 à 16:00
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
18 avril 2007 à 15:44
Salut,
 expr "$myvar" : ".*_\(.*\)_.*"
;-)
0
tomk41 Messages postés 12 Date d'inscription mercredi 18 avril 2007 Statut Membre Dernière intervention 15 septembre 2008
18 avril 2007 à 15:52
Magnifique :-)
Merci beaucoup !!
0
mamiemando Messages postés 33367 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 19 novembre 2024 7 801
18 avril 2007 à 16:00
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