Estoy tratando de hacer coincidir múltiples valores alfanuméricos (este número podría variar) de una cadena y guardarlos en una matriz de grupo de captura bash. Sin embargo, solo estoy obteniendo el primer partido:
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]}
Como puede ver, coincide con el primer valor que estoy buscando, pero no con el segundo.
bash
regular-expression
Arthur Lyssenko
fuente
fuente
echo "$mystring1" | grep -oE '/instances/([A-Z0-9]+)'
?Respuestas:
Es una pena que no puedas hacer correspondencias globales en bash. Puedes hacerlo:
Esto funciona cortando el prefijo coincidente de la cadena para que la siguiente parte pueda coincidir. Destruye la cadena, pero en la función es una variable local, a quién le importa.
De hecho, usaría esa función para llenar una matriz:
fuente
Para obtener el segundo valor de la matriz, debe tener un segundo conjunto de paréntesis en la expresión regular:
fuente