Próbuję dopasować wiele wartości alfanumerycznych (liczba ta może się różnić) z ciągu i zapisać je w tablicy grup przechwytywania bash. Jednak dostaję tylko pierwszy mecz:
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]}
Jak widać - odpowiada pierwszej szukanej wartości, ale nie drugiej.
bash
regular-expression
Arthur Lyssenko
źródło
źródło
echo "$mystring1" | grep -oE '/instances/([A-Z0-9]+)'
?Odpowiedzi:
Szkoda, że nie można dopasowywać globalnie w bash. Możesz to zrobić:
Działa to poprzez odcięcie dopasowanego prefiksu od łańcucha, aby można było dopasować następną część. Niszczy ciąg, ale w funkcji jest zmienną lokalną, więc kogo to obchodzi.
Używałbym tej funkcji do wypełnienia tablicy:
źródło
Aby uzyskać drugą wartość tablicy, musisz mieć drugi zestaw nawiasów w wyrażeniu regularnym:
źródło