Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 tongue

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 smile

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. wink


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 wink
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