RESOLU capture Regex avec Bash

Bonjour

je souhaite utiliser Perl5 dans un script bash, juste pour extraire différentes sous-chaines d’une chaine +/- préformatée.

Je ne trouve pas comment passer la variable bash à la commande Perl:
puis les variables résultats à bash

La variable bash est : source

(Ref,Suf)=$(\ # résultat dans bash
perl -e '($pref,$suf) =~ ([[:digit:]]{2})Action([[:digit:]]{1,2})[.]csv ]]; # capture regex dans Perl
print “$pref [Action] $suf [.csv]” ’ $source
)

Comment appliquer la reconnaissance sous Perl de la variable bash «source» ?

À moins que la capture de reconnaissance de regex soit possible sous bash, ce que je n’ai pas trouvé.

GNU bash, version 4.3.30
Perl v5.20.2

Merci

Auto-réponse:

echo “$source” | perl -nle ‘m/(\d{2})Action(\d{1,2})[.]csv/; print “$1 [Action] $2 [.csv]”’

il ne reste plus qu’à récupérer le résultat dans 2 variables bash
(pour l’instant, je ne trouve pas)

Avec bash, il est possible d’utiliser des regex,
mais je ne connais pas perl et je ne sais pas ce qu’il y a dans $source ni ce qui est retourné par la ligne de commande perl


Avec la variable suivante définie comme suit :

maRegex='([[:digit:]]{2})Action([[:digit:]]{1,2}).csv'

et la suivante :

maVar="nom01Action02.csv"

La ligne de commande suivante :

 [[ "${maVar}" =~ $maRegex ]] && echo "voilà ${BASH_REMATCH[1]} blabla ${BASH_REMATCH[2]} blibli"

retournera : voilà 01 blabla 02 blibli

Mais avec :

maVar="nomSansChiffresActionXX.csv"

ou :

maVar="toto00action99.csv"

Rien ne sera retourné par cette dernière ligne de commande.

$BASH_REMATCH[1] semble bien être l’élément qui me manquait à la solution bash ! ($1 pour Perl)

$source contient un nom sous le format
02Action2.csv
ou
60Action22.csv

Grand merci MicP

PS, je change l’intitulé pour l’adapter à la solution

Donc, si le nom doit commencer par la première paire de chiffres, autant y ajouter un ^
et si elle doit finir par .csv on pourrait y ajouter un $
ce qui fera que :

maVar="nom01Action02.csv"

ou

maVar="01Action02.csvEtPlus"

ne passeront pas avec la regex :

 maRegex='^([[:digit:]]{2})Action([[:digit:]]{1,2}).csv$'

Mais :

maVar="01Action2.csv"

ou

maVar="01Action12.csv"

passeront.