awk (mawk): falha na compilação da expressão regular (operando ausente)

1

Eu quero usar o seguinte regex com o awk para validar números de telefone:

echo 012-3456-7890 | awk '/^\(?0[1-9]{2}\)?(| |-|.)[1-9][0-9]{3}( |-|.)[0-9]{4}$/ {print $0}'

Mas estou recebendo o seguinte erro:

awk: line 1: regular expression compile failed (missing operand)
    
por sci9 05.06.2018 / 06:48

1 resposta

4

Como os intervalos usados aqui são de tamanho fixo, você pode simplesmente escrever o intervalo inteiro [0-9]{3} = > %código%. E em vez de [0-9][0-9][0-9] , (| |-|.) - embora esteja confuso: você está permitindo qualquer caractere ( ( |-|.)? ), além de espaço e . ? Então, pode ser apenas - , já que space e .? são correspondidos por - . Se você está combinando o período literal . , então você deve usar . (o primeiro [- .]? é para evitar a interpretação como um intervalo de caracteres). Então:

^\(?0[1-9]{2}\)?(| |-|.)[1-9][0-9]{3}( |-|.)[0-9]{4}$

Torna-se:

^\(?0[1-9][1-9]\)?[- .]?[1-9][0-9][0-9][0-9][- .][0-9][0-9][0-9][0-9]$
    
por 05.06.2018 / 08:24