# RESOLU capture Regex avec Bash

**URL:** <https://www.debian-fr.org/t/resolu-capture-regex-avec-bash/70994>\
**Category:** Programmation\
**Created:** [Septembre 19, 2016, 5:13 UTC](https://www.debian-fr.org/t/resolu-capture-regex-avec-bash/70994 "2016-09-19T17:13:36Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Septembre 19, 2016, 5:13 UTC](https://www.debian-fr.org/t/resolu-capture-regex-avec-bash/70994/1 "2016-09-19T17:13:37Z")

</div>

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 «&nbsp;$pref [Action] $suf [.csv]&nbsp;» ’ $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

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Septembre 19, 2016, 6:41 UTC](https://www.debian-fr.org/t/resolu-capture-regex-avec-bash/70994/2 "2016-09-19T18:41:16Z")

</div>

Auto-réponse:

> echo «&nbsp;$source&nbsp;» | perl -nle ‹&nbsp;m/(\d{2})Action(\d{1,2})[.]csv/; print «&nbsp;$1 [Action] $2 [.csv]&nbsp;»&nbsp;›

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

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Septembre 19, 2016, 7:50 UTC](https://www.debian-fr.org/t/resolu-capture-regex-avec-bash/70994/3 "2016-09-19T19:50:13Z")

</div>

> [@josephtux](#):
>
> À moins que la capture de reconnaissance de regex soit possible sous bash, ce que je n’ai pas trouvé.

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 :

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

```

et la suivante :

```bash
maVar="nom01Action02.csv"

```

La ligne de commande suivante :

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

```

retournera : `voilà 01 blabla 02 blibli`

Mais avec :

```auto
maVar="nomSansChiffresActionXX.csv"

```

ou :

```auto
maVar="toto00action99.csv"

```

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

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Septembre 20, 2016, 11:29 UTC](https://www.debian-fr.org/t/resolu-capture-regex-avec-bash/70994/4 "2016-09-20T11:29:20Z")

</div>

$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

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Septembre 20, 2016, 5:30 UTC](https://www.debian-fr.org/t/resolu-capture-regex-avec-bash/70994/5 "2016-09-20T17:30:50Z")

</div>

> [@josephtux](#):
>
> $source contient un nom sous le format  
> 02Action2.csv  
> ou  
> 60Action22.csv

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 :

```bash
maVar="nom01Action02.csv"

```

ou

```bash
maVar="01Action02.csvEtPlus"

```

ne passeront pas avec la regex :

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

```

Mais :

```bash
maVar="01Action2.csv"

```

ou

```bash
maVar="01Action12.csv"

```

passeront.
