#1 Le 24/10/2024, à 11:23
- Tawal
[Bash] Extraire sous-chaîne en utilisant un motif/regex. [Résolu]
Hello,
Je connais plusieurs moyens de substitutions dans une variable.
Mais je cherche à extraire une sous-chaîne d'une variable en utilisant un motif/regex.
Le tout en une seule commande tant qu'à faire
Disons cette variable :
var="azert fffgg 12548$ dzdd dzdzd"
J'aimerais en extraire la sous-chaîne '12548' avant le '$'.
Pour ce faire, en une seule commande (supposant que l'extension shell extglob est activée), j'ai ça :
souschaine="$(expr "$var" : '.* \([0-9]\+\)\$.*')"
Ne peux-t-on pas le faire avec ce genre de syntaxe ? (exemple qui ne fonctionne pas)
souschaine="${var/^.*([0-9]+)\$.*$/\1}"
Un genre de substitution avec référence arrière.
Merci de vos éclairements
Edit:
Quelques détails pour mon cas précis :
Je récupère le contenu de la variable par un retour de commande.
Il y aura toujours 1 et 1 seul caractère marquant la sous-chaîne à extraire.
Je ne contrôle pas le nombre d'espaces ni le nombre de "mots" dans cette variable.
Par contre ma sous-chaîne sera toujours précédée d'un espace au moins et sera terminée par le caractère '$' et ne contiendra que des chiffres.
Edit2:
Je crois avoir trouvé quelque chose, toujours avec l'option shell extglob activée.
Une autre particularité de ma variable est que ma sous-chaîne est toujours précédée d'un point suivi d'un ou plusieurs espaces. Ça, simplifie les choses.
souschiane="${var//@(*.+( )|\$*)/}"
Dernière modification par Tawal (Le 24/10/2024, à 13:21)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#2 Le 24/10/2024, à 13:04
- Watael
Re : [Bash] Extraire sous-chaîne en utilisant un motif/regex. [Résolu]
$ var='azert fffgg 12548$ dzdd dzdzd'
$ rgx='.* ([0-9]+)\$.*'
$ [[ $var =~ $rgx ]] && echo "${BASH_REMATCH[1]}"
12548
$
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 24/10/2024, à 13:09
- Tawal
Re : [Bash] Extraire sous-chaîne en utilisant un motif/regex. [Résolu]
Oui, j'avais pensé aussi au BASH_REMATCH.
J'ai édité mon message et je préfère ma dernière solution.
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#4 Le 24/10/2024, à 13:28
- Watael
Re : [Bash] Extraire sous-chaîne en utilisant un motif/regex. [Résolu]
Ça simplifie les choses.
pas au décryptage.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 24/10/2024, à 15:36
- Tawal
Re : [Bash] Extraire sous-chaîne en utilisant un motif/regex. [Résolu]
Je l'avoue
J'ai mis un commentaire pour plus tard …
BASH_REMATCH aurait été vraiment intéressant si j'avais plusieurs sous chaînes à extraire.
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne