Warum gibt der folgende reguläre Ausdruck valid aus , wenn der Name hdpworker01 ist ?
name=hdpworker01
[[ $name =~ worker[[:digit:]] ]] && echo valid
Was ich versuche zu tun, ist valid zu drucken nur wenn der Name mit worker[0-999] übereinstimmt .
Beispiel für erwartete Ergebnisse:
- Für
name=worker01:valid - Für
name=hdpworker01:keine Ausgabe
Akzeptierte Antwort:
Ein regulärer Ausdruck ist standardmäßig nicht am Anfang oder Ende einer Zeichenfolge verankert. Dies ist anders als z. Globbing-Muster für Dateinamen. Das bedeutet, dass der Ausdruck irgendwo in der gegebenen Zeichenkette zutreffen kann.
Um Ihren Ausdruck am Anfang der Zeichenfolge zu verankern, verwenden Sie
^worker[[:digit:]]
Um es zusätzlich am Ende der Zeichenfolge zu verankern und ein bis drei Ziffern zuzulassen, verwenden Sie
^worker[[:digit:]]{1,3}$
Wenn Sie worker10 abgleichen möchten aber nicht worker01 oder worker003 (keine mit Nullen gefüllten Zahlen), verwenden Sie
^worker([0-9]|[1-9][0-9]{1,2})$