Dans une variable: Soustraire le dernier champ d'une arborescence [Résolu/Fermé]

Signaler
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020
-
Messages postés
18231
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 octobre 2020
-
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

Messages postés
1922
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
19 août 2020
355
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020

Salut Tomsuper,
C'est nickel, c'est exactement ce que je recherchais !
Merci beaucoup pour ton aide :-)
Messages postés
35703
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 octobre 2020
5 573
Salut,

man dirname
;-)

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

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

$ var="/toto/position/profile"

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

1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020

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 !
Messages postés
18231
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 octobre 2020
5 045
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%%!(/)}

$
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020

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+
Messages postés
35703
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 octobre 2020
5 573 >
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020

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.
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020

Ok merci :-)
Bonne journée
Messages postés
18231
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 octobre 2020
5 045
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