GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash + Name durch regulären Ausdruck überprüfen?

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})$

Linux
  1. Zirkuläre Namensreferenzen in der Bash-Shell-Funktion, aber nicht in Ksh?

  2. Die Definition eines regulären Ausdrucks?

  3. Bash-Skriptfehler:Integer-Ausdruck erwartet?

  4. Bash:Reguläre Ausdrücke als Ersatz?

  5. 6 Beispiele für bedingte Bash-Ausdrücke ( -e, -eq, -z, !=, [, [[ ..)

Bash-Sequenzausdruck (Bereich)

Beheben Sie den Fehler „Der angegebene Hostname ist ungültig“.

Woher weiß ich den Namen der Skriptdatei in einem Bash-Skript?

Dateiname wird nicht korrekt mit Unterstrich _ in Bash gedruckt

Identifizieren des empfangenen Signalnamens in Bash

Warum funktioniert `\d` nicht in regulären Ausdrücken in sed?