Extraire un nom de repertoire

Résolu/Fermé
mickey4 Messages postés 39 Date d'inscription mercredi 6 juin 2007 Statut Membre Dernière intervention 22 juin 2009 - 8 juin 2007 à 16:15
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 8 juin 2007 à 18:53
bonjours
je recupere un nom de fichier suivant
rep1/rep2/../repn/nom-du-fichier

jaimerais savoir comment faire pour extraire seulement les chemins /rep1/rep2/../repn
le nombre de repertoire a traverser n'étant pas constant

merci

5 réponses

blux Messages postés 26503 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 décembre 2024 3 317
8 juin 2007 à 16:18
Salut,

avec quel 'langage' :

shell ou autre ?
0
Jean-François Pillou Messages postés 18301 Date d'inscription lundi 15 février 1999 Statut Webmaster Dernière intervention 16 février 2023 63 274
8 juin 2007 à 16:18
Par exemple comme ceci :

echo "rep1/rep2/../repn/nom-du-fichier" | sed "s/\(.*\?\/\)[^\/]*/\1/"
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
8 juin 2007 à 16:27
Salut,

pour la regex on peu recuperer tout simplement tout jusqu'au dernier / (bon je n'ai pas teste mais je crois que ça marche comme ça :-))
echo "rep1/rep2/../repn/nom-du-fichier" | sed "s/(\.*)\//\1/"

0
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 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
8 juin 2007 à 16:43
Salut,

Plutôt :
echo "rep1/rep2/../repn/nom-du-fichier" | sed -r "s#(.*/).*#\1#"
;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
8 juin 2007 à 16:46
Salut,

jaimerais savoir comment faire pour extraire seulement les chemins /rep1/rep2/../repn

d'après ça demande il ne voulais pas le / à la fin
(.*/)
donc, il ne faut pas le capturer :-))
"s#(.*)/#\1#"
et tu n'as pas besoin de .* à la fin, c'est une consommation de texte sans justification

tu commences à devenir gourmand toi :-))

et tu te rappelles que -r ne marche pas tout le temps :-)) question de version sed
0
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 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
8 juin 2007 à 16:57
donc, il ne faut pas le capturer :-))
"s#(.*)/#\1#"
echo "rep1/rep2/../repn/nom-du-fichier" | sed -r "s#(.*)/#\1#"
rep1/rep2/../repnnom-du-fichier
Voilà le résultat de ta regex.

et tu n'as pas besoin de .* à la fin, c'est une consommation de texte sans justification
echo "rep1/rep2/../repn/nom-du-fichier" | sed -r "s#(.*/)#\1#"
rep1/rep2/../repn/nom-du-fichier
Ca foire ;-))

et tu te rappelles que -r ne marche pas tout le temps :-)) question de version sed
Je n'ai fait que reprendre ta regex où tu n'avais certe pas mis le switch "-r", mais comme tu n'avais pas protégé les accolades, j'en ai déduit que tu avais juste oublié le switch ;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
8 juin 2007 à 17:01
(bon je n'ai pas teste mais je crois que ça marche comme ça :-))
alors tu n'as pas vu ça

je vais voir à la maison dès que j'arrive
moi aussi j'ai pris la regex de Jeff, je voulais tout simplement le charrier un peu :-))
0
mickey4 Messages postés 39 Date d'inscription mercredi 6 juin 2007 Statut Membre Dernière intervention 22 juin 2009 3
8 juin 2007 à 16:22
le language est shell bash
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
8 juin 2007 à 16:24
Salut,

la commande dirname n'est pas suffisante?

DIR=$(dirname rep1/rep2/../repn/nom-du-fichier)
echo $DIR

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mickey4 Messages postés 39 Date d'inscription mercredi 6 juin 2007 Statut Membre Dernière intervention 22 juin 2009 3
8 juin 2007 à 16:24
sa marche merci
0