Ich versuche, mehrere alphanumerische Werte (diese Zahl kann variieren) von einer Zeichenfolge abzugleichen und sie in einem Bash-Capture-Gruppenarray zu speichern. Ich bekomme jedoch nur das erste 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]}
Wie Sie sehen, stimmt es mit dem ersten Wert überein, den ich suche, aber nicht mit dem zweiten.
bash
regular-expression
Arthur Lyssenko
quelle
quelle
echo "$mystring1" | grep -oE '/instances/([A-Z0-9]+)'
durchlaufen?Antworten:
Es ist eine Schande, dass Sie in Bash kein globales Matching durchführen können. Du kannst das:
Dies funktioniert, indem das übereinstimmende Präfix von der Zeichenfolge entfernt wird, damit der nächste Teil abgeglichen werden kann. Es zerstört den String, aber in der Funktion ist es eine lokale Variable, also wen interessiert das?
Ich würde diese Funktion tatsächlich verwenden, um ein Array zu füllen:
quelle
Um den zweiten Array-Wert zu erhalten, benötigen Sie einen zweiten Satz von Klammern im regulären Ausdruck:
quelle