Bash - Regex para unir tuplas de números

Bash - Regex para unir tuplas de números

Quiero comprobar si una cadena que se ha escrito en una variable en bash mediante el comando de lectura es una tupla de dos números. Que yo sepa, esto debería ser posible con

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

para una tupla de dos números, separados por al menos un espacio en blanco y cualquier número de espacios en blanco antes y después, probé

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

que debe coincidir

12 123
  23 3246543
123     345     
     34      23
1 234

pero no

123 123 123
1235124
123w123 123
etc.

sin embargo, esto no funciona...

Respuesta1

POSIXfunción de script de shell, utiliza la expansión de parámetros para obtener el primer y segundo número, -eqtiene éxito solo si hay dos argumentos que son ambos el mismo número (y falla si hay menos o más argumentos, o si alguno contiene letras) y !=para verificar si hay un espacio . Devolucionesverdaderosólo si es una tupla de dos números:

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

Prueba:

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

Producción:

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

información relacionada