Menu

Probléme de cut [Résolu]

- - Dernière réponse :  flow825 - 1 juin 2018 à 07:59
Bonjour,

J'ai une variable en shell qui reçois des noms de fichiers comme cela :

sauvegarde--test_(futurs_testeur)_(XYZabcdefg)-20180530-1114.toc
sauvegarde-fichier-tuille1_(XYZgdrhgfg)-20180530-1114.toc
sauvegarde-démarche_qualité_(ABCfergregg)-20180530-1114.toc

Puis j'utilise la commande suivante pour récupérer la partie en gras :

echo $filename | cut -d "(" -f2 | cut -d ")" -f1 | cut -c1-3


Cependant pour le premier nom de fichier cela ne fonctionne pas car le cut ce réalise sur la première parenthèse.

Est-il possible de faire en sorte que le cut s’effectue sur les dernières parenthèses pour éviter que dans les cas ou il y ai plus de deux parenthèse dans le nom de fichier de récupère la bonne valeur ?

Merci de vos réponse
Afficher la suite 

Votre réponse

3 réponses

Messages postés
1189
Date d'inscription
lundi 2 mai 2016
Statut
Membre
Dernière intervention
17 mai 2019
164
0
Merci
Salut,

La partie à récupérer correspond toujours à des caractères en majuscule ?
Ou c'était juste un exemple (les majuscules) ?
Les majuscules c'étaient pour rendre plus visible mais ils ne sont pas en majuscule à la base.
UnGnU
Messages postés
1189
Date d'inscription
lundi 2 mai 2016
Statut
Membre
Dernière intervention
17 mai 2019
164 > flow825 -
Ok, je me doutais un peu ;-\

Mais bon...

$ cat f1
sauvegarde--test_(futurs_testeur)_(XYZabcdefg)-20180530-1114.toc
sauvegarde-fichier-tuille1_(XYZgdrhgfg)-20180530-1114.toc
sauvegarde-démarche_qualité_(ABCfergregg)-20180530-1114.toc

$ sed 's/.*(\(...\).*/\1/' f1
XYZ
XYZ
ABC

$ grep -Po '.*\(\K...' f1
XYZ
XYZ
ABC

Transposé sur une variable :
$ var="sauvegarde-fichier-tuille1_(XYZgdrhgfg)-20180530-1114.toc"

$ sed 's/.*(\(...\).*/\1/' <<<"${var}"
XYZ
Merci sa fonctionne nikel, bien que j'ai un peu de mal a comprendre comment fonctionne les regex hormis que les trois points doivent correspondre à la partie conservé.
Commenter la réponse de UnGnU
0
Merci
salut,

en bash :
$ filename="sauvegarde-démarche_qualité_(ABCfergregg)-20180530-1114.toc"
$ filename="${filename##*(}"
$ echo "${filename::3}
ABC
Utilisateur anonyme > zipe31
Messages postés
36522
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
19 mai 2019
-
$ echo $BASH_VERSION
4.4.19(1)-release
sur ArchLinux.
zipe31
Messages postés
36522
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
19 mai 2019
5786 > Utilisateur anonyme -
Dans ton exemple précédent, le prompt est un chevron (>) ce qui correspond davantage à celui d'un shell genre tcsh ou csh dans mon souvenir, d'où ma question.
Utilisateur anonyme > zipe31
Messages postés
36522
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
19 mai 2019
-
« qu'est-ce qu'il a ? il est pas frais mon... » prompt ?
:)
zipe31
Messages postés
36522
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
19 mai 2019
5786 > Utilisateur anonyme -
Chais pô, je le trouve juste un peu trop… chevronné ;-)
Chez moi c'est la formule avec l'antislash qui fonction quand je suis dans un bash ...


$ filename="sauvegarde--test_(futurs_testeur)_(XYZabcdefg)-20180530-1114.toc"
$ filename="${filename##*\(}"
$ echo "${filename::3}"


Merci pour vos différentes réponses :-)
Commenter la réponse de Utilisateur anonyme
Messages postés
1349
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
9 mai 2019
101
0
Merci
Erf, pour une fois que le sujet avait l'air de sortir un peu du thème général de la section;
Je me rend compte que j'ai mal lu le titre.

C'est vicieux, le "l" et le "t" se ressemble de beaucoup!

Belle regex @UnGnU
Commenter la réponse de Exileur