Bash - Regex para corresponder tuplas de números [duplicados]

1

Eu quero verificar se uma string que foi gravada em uma variável no bash através do comando read é uma tupla de dois números. Para meu conhecimento, isso deve ser possível com

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

para uma tupla de dois números, separados por pelo menos um espaço em branco e qualquer número de espaços em branco antes e depois, tentei

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

que deve corresponder

12 123
  23 3246543
123     345     
     34      23
1 234

mas não

123 123 123
1235124
123w123 123
etc.

no entanto, isso não funciona ...

    
por snurden 19.02.2016 / 14:55

1 resposta

0

POSIX função de script de shell, usa expansão de parâmetro para obter primeiro e segundo número, -eq é bem-sucedida somente se houver dois argumentos que são o mesmo número (e falhar há menos ou mais argumentos ou, se houver, letras) e != para verificar um espaço. Retorna true somente se for uma tupla de dois números:

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

Teste:

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

Saída:

yes 12 123
yes 23 3246543
yes 123     345
yes 34      23
yes 1 234
no  123 123 123
no  1235124
no  123w123 123
    
por 16.04.2018 / 04:14