Dans une variable: Soustraire le dernier champ d'une arborescence

Résolu
Ka-El Messages postés 279 Statut Membre -  
dubcek Messages postés 19021 Statut Contributeur -
Bonjour,
Je suis actuellement confronté à un problème.
Pour bien me faire comprendre, je vais utiliser l'exemple suivant:
J'ai la variable $KA-EL
celle-ci peut contenir l'information suivante:
echo $KA-EL
/toto/position/espace/troc/profile
ou
/tata/bateau/vac/profile
ou
/tonton/batterie etc.../profile


Mon but est de travailler la variable $KA-EL afin que j'obienne dans une autre variable, les mêmes arborescences cités au dessus mais sans le "profile" à la fin.
Soit:
echo $JO-REL
/toto/position/espace/troc/
ou
/tata/bateau/vac/
ou
/tonton/batterie etc.../


Comment puis-je obtenir ce résultat ?
Est-ce quelqu'un aurait une idée ?
Merci :-)

3 réponses

Tomsuper Messages postés 2104 Statut Membre 360
 
Bonjour,

Avec quelque choses comme ca ?

:~$KA-EL="/toto/position/espace/troc/profile"
/* :~$ JO-REL = " '${KA-EL%p*}' " */ Attention j'ai modifier cette ligne
:~echo JO-REL

Tiens moi au jus

1
Ka-El Messages postés 279 Statut Membre
 
Salut Tomsuper,
C'est nickel, c'est exactement ce que je recherchais !
Merci beaucoup pour ton aide :-)
0
zipe31 Messages postés 38797 Statut Contributeur 6 433
 
Salut,

man dirname
;-)

$ var="/toto/position/espace/troc/profile"

$ dirname "${var}"
/toto/position/espace/troc

$ var="/toto/position/profile"

$ dirname "${var}"
/toto/position

1
Ka-El Messages postés 279 Statut Membre
 
Salut zipe31,
Tu vas bien ? ;-)
je savais que je pouvais compter sur toi ;-)
Avec cette solution et celle de Tomsuper, j'ai de quoi encore m'améliorer en shell.
Merci à vous deux !
0
dubcek Messages postés 19021 Statut Contributeur 5 637
 
hello
n'importe quel nom
$ shopt -s extglob
$ var=/toto/position/espace/troc/profile
$ echo ${var%%+([[:alnum:]])}
/toto/position/espace/troc/
$
$ # pourquoi ceci ne fonctionne pas ?
$ echo ${var%!(/)}
/toto/position/espace/troc/profile
$ echo ${var%%!(/)}

$
0
Ka-El Messages postés 279 Statut Membre
 
Salut Dubcek,
J'espère que ce n'est pas à moi que tu poses cette problématique ? :-)
D'ailleurs, peux-tu m'indiquer à quoi sert cette commande ?:
$ shopt -s extglob


A+
0
zipe31 Messages postés 38797 Statut Contributeur 6 433 > Ka-El Messages postés 279 Statut Membre
 
Salut,

Comme toujours, avoir le réflexe
man <commande>
ou
help <commande>
:
Extrait du man bash
shopt [-pqsu] [-o] [nom_opt ...]
Bascule la valeur des variables contrôlant le comportement optionnel du shell. Sans option, ou avec l'option -p, une liste de toutes les options configurables est affichée, avec l'indication de l'état de chacune d'entre elles. L'option -p réclame un affichage susceptible d'être réutilisé en entrée. Les autres options ont les significations suivantes :

-s Activer chaque nom_opt indiqué.
-u Désactiver chaque nom_opt indiqué.
-q Supprimer la sortie normale (mode silencieux). Le code de retour indique si l'option nom_opt est active ou non. Si plusieurs nom_opt sont fournis en argument de l'option -q, le code de retour est nul si tous les nom_opt sont actifs, et non-nul sinon.
-o Restreindre les valeurs des nom_opts à celles définies pour l'option -o de la commande set interne.

Si l'option -s ou -u est utilisé sans argument nom_opt, l'affichage est limité aux options qui sont actives ou inactives, respectivement. sauf indication contraire, les options shopt sont désactivés par défaut.

Le code de retour lors d'un affichage est zéro si tous les nom_opt sont actifs, non-nul sinon. Lors d'une activation ou inhibition, le code de retour est nul sauf si nom_opt n'est pas une option valide du shell.


$ help shopt
shopt: shopt [-pqsu] [-o] [nom_opt ...]
Active ou désactive des options du shell.

Change la valeur de chaque option du shell NOMOPT. S'il n'y a pas d'argument
à l'option, la commande liste toutes les options du shell en indiquant si
elles sont actives ou non.

Options :
-o restreint les NOMOPT à ceux définis pour être utilisés avec « set -o »
-p affiche chaque option du shell en indiquant son état
-q supprime l'affichage
-s active (set) chaque NOMOPT
-u désactive (unset) chaque NOMOPT

Code de retour :
Renvoie le code de succès si NOMOPT est active ; échec si une option non valable
est donnée ou si NOMOPT est inactive.
0
Ka-El Messages postés 279 Statut Membre
 
Ok merci :-)
Bonne journée
0
dubcek Messages postés 19021 Statut Contributeur 5 637
 
j'ai mis cette commande, car la man page de bash spécifie que:
Si l'option extglob du shell option est activée par la commande shopt

pour reconnaitre les :
?(liste-motif)     Correspond à zéro ou une occurrence des motifs indiqués 
*(liste-motif)        Correspond à zéro ou plusieurs occurrences des motifs indiqués  
+(liste-motif)        Correspond à une ou plusieurs occurrences des motifs indiqués   
@(liste-motif)        Correspond à une occurrence exactement des motifs indiqués 
!(liste-motif)        Correspond à tout sauf les motifs indiqués
0