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

Résolu/Fermé
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020 - 25 sept. 2019 à 10:58
dubcek Messages postés 18680 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 9 décembre 2023 - 26 sept. 2019 à 10:07
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 1921 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 19 août 2020 360
Modifié le 25 sept. 2019 à 11:08
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 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
25 sept. 2019 à 12:33
Salut Tomsuper,
C'est nickel, c'est exactement ce que je recherchais !
Merci beaucoup pour ton aide :-)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 431
25 sept. 2019 à 11:11
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 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
Modifié le 25 sept. 2019 à 12:37
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 18680 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 9 décembre 2023 5 599
25 sept. 2019 à 16:14
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 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
26 sept. 2019 à 07:49
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 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 431 > Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
26 sept. 2019 à 09:01
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 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
26 sept. 2019 à 09:23
Ok merci :-)
Bonne journée
0
dubcek Messages postés 18680 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 9 décembre 2023 5 599
Modifié le 26 sept. 2019 à 10:15
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