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 bash
abzugleichen :zsh
ksh93
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/