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.