Wie kann ich in Unix eine variable (veränderbare) Zeichenfolge überprüfen?

Wie kann ich in Unix eine variable (veränderbare) Zeichenfolge überprüfen?

Ich verwende Unix auf einer Bash-Shell und möchte überprüfen, ob es die folgende Form hat:

[0-9*][,[0-9*]*]

Daher wären alle folgenden Zeichenfolgen gültig:

  • 141.325.562
  • 65
  • 659,948,8465,9853,2659,156,884,351,0,451,01,10

Mein Unix-System ist eher einfach, daher wäre ich für jede Hilfe dankbar.

Antwort1

Um den Inhalt einer Shell-Variable in oder bashabzugleichen :zshksh93

re='^[0-9]+(,[0-9]+)*$'
[[ $string =~ $re ]] && echo matches

POSIX:

case $string in
  ("" | *[!,0-9]* | ,* | *, | *,,*) ;;
  (*) echo matches;;
esac

Bournely:

expr " $string" : ' [0-9]\{1,\}\(,[0-9]\{1,\}\)*$' > /dev/null &&
  echo matches

Zum Abgleichen mit Eingabezeilen:

grep -xE '[0-9]+(,[0-9]+)*'

Wir verwenden +(oder das BRE-Äquivalent \{1,\}) zum Abgleichen1oder mehr Ziffern. *würden übereinstimmen0oder mehr.

Antwort2

Der gewünschte reguläre Ausdruck ist wahrscheinlich dieser:

[0-9]*[,[0-9]+]*

Darüber hinaus können Sie mit diesem Tool Regex im laufenden Betrieb überprüfen:https://regex101.com/

verwandte Informationen