[shell] Récupérer certains caractère [Résolu/Fermé]

Signaler
-
Messages postés
29277
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
3 septembre 2020
-
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" ?

2 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 769
Salut,
 expr "$myvar" : ".*_\(.*\)_.*"
;-)
Messages postés
12
Date d'inscription
mercredi 18 avril 2007
Statut
Membre
Dernière intervention
15 septembre 2008

Magnifique :-)
Merci beaucoup !!
Messages postés
29277
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
3 septembre 2020
6 932
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