[SHELL] Récuperer les 3 derniers caracteres [Résolu/Fermé]

Signaler
-
 jérome -
Bonjour, je souhaite récupérer l'extension d'un nom de fichier en SHELL.

J'ai donc fait
ext=`echo $nom |cut -f2 -d.`


Cependant, parfois j'ai des fichiers qui s'appellent "blabla.truc.jpeg" donc ca fausse tout et je me retrouve avec une extension qui s'appelle truc

Est il possible de faire l'inverse, c'est à dire de partir de la fin de la chaine de caractere et recuperer ce qui est à droite du delimiteur "." ?

merci d'avance

Cdlt

Vincent

3 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 795
Salut,
jp@MDK:~/tmpfs ssh$ var="mon.pro.txt"
jp@MDK:~/tmpfs ssh$ echo ${var##*.}
txt
;-))
6
Merci

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

CCM 76687 internautes nous ont dit merci ce mois-ci

merciiii ;)
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 795
Re-

Ça c'était pour le cas ou les extensions ont plus de 3 caractères (jpeg), mais si tes extensions sont formatées sur 3 caractères, tu peux aussi faire comme suit :
[jp@MDK tmpfs]$ var="mon.pro.txt"
[jp@MDK tmpfs]$ echo ${var: -3}
txt
[jp@MDK tmpfs]$
;-))
Messages postés
70
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
1 mars 2012
9
Bonjour,

Je rencontre actuellement le même besoin.

J'ai essayé cette commande en bash, elle fonctionne à merveille, mais le problème, c'est que mes scripts doivent être en ksh.

bash-3.00$ ksh
$  var=15225452211155912345
$ echo ${var: -5}
ksh: ${var: -5}: bad substitution


Existerait-il le même type de solution en ksh ??

Merci beaucoup pour votre aide,

Cdlt,

Mathieu
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 795 >
Messages postés
70
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
1 mars 2012

Salut,

Tu peux toujours essayer comme ça :
$ var=15225452211155912345
$ expr "$var" : ".*\(.....\)"
12345
;-))
Messages postés
70
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
1 mars 2012
9 >
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020

Bonjour Jipicy,

Merci beaucoup, cela marche nickel.

Mat
principe valable pour tous les shells et toutes les longueurs de suffixes (mais syntaxe de déclaration de variable à adapter par exemple en csh) :

# extrait le suffixe d'un nom de fichier : aa.bb.cc -> .cc
suffixe() {
nom=`basename "$1"` &&
nom=`expr match "$nom" ".*\(\..*\)$"` &&
echo $nom
}

# extrait les suffixes d'un nom de fichier : aa.bb.cc -> .bb.cc
suffixes() {
nom=`basename "$1"` &&
nom=`expr match "$nom" "[^.]*\(\..*\)$"` &&
echo $nom
}

suff=$(suffixe monFichier.sonExtension)