Estou tentando corresponder vários valores alfanuméricos (esse número pode variar) de uma string e salvá-los em uma matriz de grupo de captura bash. No entanto, estou conseguindo apenas a primeira partida:
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 você pode ver, ele corresponde ao primeiro valor que estou procurando, mas não ao segundo.
bash
regular-expression
Arthur Lyssenko
fonte
fonte
echo "$mystring1" | grep -oE '/instances/([A-Z0-9]+)'
?Respostas:
É uma pena que você não possa fazer uma correspondência global no bash. Você consegue fazer isso:
Isso funciona cortando o prefixo correspondente da string para que a próxima parte possa ser correspondida. Destrói a string, mas na função é uma variável local, então quem se importa.
Na verdade, eu usaria essa função para preencher uma matriz:
fonte
Para obter o segundo valor da matriz, você precisa ter um segundo conjunto de parênteses na regex:
fonte