J'essaie de faire correspondre plusieurs valeurs alphanumériques (ce nombre peut varier) à partir d'une chaîne et de les enregistrer dans un tableau de groupe de capture bash. Cependant, je n'obtiens que le premier match:
mystring1='<link rel="self" href="/unix//api/clouds/1/instances/1BBBBBB"/> dsf <link rel="self" href="/unix//api/clouds/1/instances/2AAAAAAA"/>'
regex='/instances/([A-Z0-9]+)'
[[ $mystring1 =~ $regex ]]
echo ${BASH_REMATCH[1]}
1BBBBBB
echo ${BASH_REMATCH[2]}
Comme vous pouvez le voir, cela correspond à la première valeur que je recherche, mais pas à la seconde.
bash
regular-expression
Arthur Lyssenko
la source
la source
echo "$mystring1" | grep -oE '/instances/([A-Z0-9]+)'
?Réponses:
C'est dommage que vous ne puissiez pas faire de correspondance globale dans bash. Tu peux le faire:
Cela fonctionne en coupant le préfixe correspondant de la chaîne afin que la partie suivante puisse être mise en correspondance. Il détruit la chaîne, mais dans la fonction, c'est une variable locale, alors peu importe.
J'utiliserais en fait cette fonction pour remplir un tableau:
la source
Pour obtenir la deuxième valeur du tableau, vous devez avoir un deuxième ensemble de parenthèses dans l'expression régulière:
la source