Я использую Unix в оболочке Bash и хочу убедиться, что она имеет следующий вид:
[0-9*][,[0-9*]*]
Таким образом, все следующие строки будут допустимыми:
- 141,325,562
- 65
- 659,948,8465,9853,2659,156,884,351,0,451,01,10
Мой Unix довольно прост, поэтому любая помощь будет оценена по достоинству.
решение1
Для сопоставления содержимого переменной оболочки в bash
, zsh
или ksh93
:
re='^[0-9]+(,[0-9]+)*$'
[[ $string =~ $re ]] && echo matches
POSIXly:
case $string in
("" | *[!,0-9]* | ,* | *, | *,,*) ;;
(*) echo matches;;
esac
Борнели:
expr " $string" : ' [0-9]\{1,\}\(,[0-9]\{1,\}\)*$' > /dev/null &&
echo matches
Для сопоставления строк ввода:
grep -xE '[0-9]+(,[0-9]+)*'
Мы используем +
(или эквивалент BRE \{1,\}
) для сопоставления1или больше цифр. *
будет соответствовать0или больше.
решение2
Вероятно, вам нужно следующее регулярное выражение:
[0-9]*[,[0-9]+]*
Кроме того, вы можете проверять регулярные выражения «на лету» с помощью этого инструмента:https://regex101.com/