[SHELL] Récuperer les 3 derniers caracteres

Résolu
Vincent -  
 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
Configuration: Indeterminable Indeterminable

3 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,
    jp@MDK:~/tmpfs ssh$ var="mon.pro.txt"
    jp@MDK:~/tmpfs ssh$ echo ${var##*.}
    txt
    
    ;-))
    6
    1. Vincent
       
      merciiii ;)
      0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    1. gorkimat Messages postés 71 Statut Membre 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
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > gorkimat Messages postés 71 Statut Membre
         
        Salut,

        Tu peux toujours essayer comme ça :
        $ var=15225452211155912345
        $ expr "$var" : ".*\(.....\)"
        12345
        ;-))
        0
      2. gorkimat Messages postés 71 Statut Membre 9 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Bonjour Jipicy,

        Merci beaucoup, cela marche nickel.

        Mat
        0
  3. jérome
     
    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