Как проверить переменную (изменяемую) строку в Unix?

Как проверить переменную (изменяемую) строку в Unix?

Я использую 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/

Связанный контент