[SHELL] Récuperer les 3 derniers caracteres

Résolu/Fermé
Vincent - 25 avril 2007 à 17:43
 jérome - 25 févr. 2009 à 18:15
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

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
25 avril 2007 à 17:47
Salut,
jp@MDK:~/tmpfs ssh$ var="mon.pro.txt"
jp@MDK:~/tmpfs ssh$ echo ${var##*.}
txt
;-))
6
merciiii ;)
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
25 avril 2007 à 19:00
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]$
;-))
2
gorkimat Messages postés 70 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 1 mars 2012 9
28 févr. 2008 à 13:37
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
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 > gorkimat Messages postés 70 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 1 mars 2012
28 févr. 2008 à 13:51
Salut,

Tu peux toujours essayer comme ça :
$ var=15225452211155912345
$ expr "$var" : ".*\(.....\)"
12345
;-))
0
gorkimat Messages postés 70 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 1 mars 2012 9 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
28 févr. 2008 à 13:55
Bonjour Jipicy,

Merci beaucoup, cela marche nickel.

Mat
0
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)
0