Appliquer une regex sur une variable

Résolu/Fermé
lamouette - 26 août 2018 à 19:43
 lamouette - 27 août 2018 à 05:20
Bonjour à tous,
je souhaiterais extraire une parti d'une chaine stocké dans une variable via une regex, mais j'ignore la syntaxe à utiliser.

Par exemple:

#!/bin/bash

nom=mon.super.fichier.S01E03.blabla.avi


j'aimerai pouvoir recupérer uniquement S01 et E03 ainsi que sont extention .avi sachant que les chiffres changeront.
Je pourrais par exemple avoir mon.super.fichier.S04E11.blabla.mpeg ou autre.

Merci à vous.


4 réponses

Utilisateur anonyme
27 août 2018 à 01:18
presque.
là, tu demandes à ce qu'il y ait quatre chiffres après chaque lettre : {2} + {2}. :/

soit
> nom='mon.super.fichier.S01E03.blabla.avi'

en bash :
> rgx=".*([Ss][0-9][1-9]).*([Ee][0-9][1-9]).*\.(.*)"
> [[ $nom =~ $rgx ]] && printf '%s\n' "${BASH_REMATCH[@]}"
mon.super.fichier.S01E03.blabla.avi
S01
E03
avi
BASH_REMATCH
est un tableau, dont l'indice
0
contient la totalité de la regex, et les indices suivant, eux, contiennent ce qui est retenu entre les parenthèses.

ça fonctionne si la
S
aison est toujours placée avant l'
E
pisode.

NB: le
>
, c'est le prompt du terminal.
1
Utilisateur anonyme
26 août 2018 à 21:53
salut,

d'accord, mais comment, toi, tu reconnais les données à conserver ?
0
bonjour lapiel et bien je voudrais juste pouvoir récupérer le bout de chaîne aillant le format S02 soit la lettre S suivi d'un chiffre de 0 à 9 et d'un autre chiffre de 1 à 9 idem pour E11 peu importe leur emplacement dans la chaîne. Se qui dans une regex pourrais donner ça:

[Ss][0-9]{2}[1-9]{2}
[Ee][0-9]{2}[1-9]{2}

Comment donc faire pour ne récupérer que ce qui correspond à la regex dans une variable?

Pour l’extension j'ai résolu le problème grâce à la commande cut
0
là, tu demandes à ce qu'il y ait quatre chiffres après chaque lettre : {2} + {2}. :/
c'est vrai j'avias pas vu, probleme se copier coller.

Sinon merci c'est parfait.

C'est marrant, je découvre bash et je trouve que certaine syntaxe ressemble au C.

Merci et à bientot
0