Bash - Regex для сопоставления кортежей чисел

Bash - Regex для сопоставления кортежей чисел

Я хочу проверить, является ли строка, записанная в переменную в bash через команду read, кортежем из двух чисел. Насколько мне известно, это должно быть возможно с помощью

if [[ "$input" =~ "$regex" ]]; then ...

для кортежа из двух чисел, разделенных как минимум одним пробелом и любым количеством пробелов до и после, я попробовал

$regex="^ *[0-9]+ +[0-9]+ *$"

который должен соответствовать

12 123
  23 3246543
123     345     
     34      23
1 234

но нет

123 123 123
1235124
123w123 123
etc.

Однако это не работает...

решение1

POSIXФункция скрипта оболочки, использует расширение параметра для получения первого и второго числа, -eqуспешно выполняется только в том случае, если есть два аргумента, которые являются одинаковыми числами (и не выполняется, если аргументов меньше или больше, или если какой-либо из них содержит буквы), и !=для проверки пробела. Возвращаетистинныйтолько если это кортеж из двух чисел:

is_tup() { [ ${1% *} -eq ${1% *} -a \ 
             ${1#* } -eq ${1#* } -a "${1% *}" != "$1" ] 2> /dev/null ; }

Тест:

echo '12 123
  23 3246543
123     345     
     34      23
1 234
123 123 123
1235124
123w123 123' | 
while read x ; do is_tup "$x" && a=yes || a=no ; printf '%s\t%s\n' $a "$x" ; done

Выход:

yes 12 123
yes 23 3246543
yes 123     345
yes 34      23
yes 1 234
no  123 123 123
no  1235124
no  123w123 123

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