(bash) Récupérer une sous chaine en regex

Marine -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour tout le monde,

Je bute sur une histoire d'expression régulière toute bête :

J'ai un fichier appelé monFichier.ssa et je veux simplement en extraire le nom "monFichier" (sans le .ssa) dans une variable !

J'essaye plusieurs techniques comme avec la commande sed :
sed -e '\(.*\)\.ssa'
Mais rien à faire, il doit y avoir une notion qui m'échappe...
Je ne suis même pas sure que sed soit la commande adéquate, car j'ai cru comprendre qu'elle sert surtout à renommer des sous chaînes.

Je vous remercie par avance ! :-)

1 réponse

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    ello
    avec basename, par exemple
    $ basename monFichier.ssa .ssa
    monFichier
    $ 
    0
    1. Marine
       
      Je ne connaissais pas cette commande,
      J'ai essayé :
      'basename $fichier .ssa'
      (Sachant que echo $fichier donne le chemin jusqu'à mon fichier)
      Et j'obtiens des messages "not found".
      Est-ce parce que mon $fichier contient le chemin en plus du nom du fichier ?
      Dans mon script je n'ai pas d'autre choix que d'avoir une variable fichier qui contient tout le chemin en plus du nom du fichier...
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      le chemin ne pose pas de problème
      $ fichier="/aaa/bbb/monFichier.ssa"
      $ basename $fichier .ssa
      monFichier
      $
      0
    3. Marine
       
      Je n'y arrivais pas avec basename, je ne sais pas pourquoi... Mais merci beaucoup pour ton aide dubcek !
      J'ai finalement réussi à obtenir ce que je voulais avec :
      fichier_sans_extension=${fichier_à_traiter%%.ssa}
      (Ce qui n'a plus rien d'une regex, mais tant que ça marche... !)

      :-)
      0
    4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      c'est la meilleure méthode puisqu'elle n'utilise pas de commande externe au shell, sinon avec sed:
      $ ichier="/aaa/bbb/monFichier.ssa"
      $ sed -e 's/\.ssa//' <<<$fichier
      /aaa/bbb/monFichier
      $ 
      
      0