awk (mawk): ошибка компиляции регулярного выражения (отсутствует операнд)

Я хочу использовать следующее регулярное выражение с awk для проверки телефонных номеров:

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

Но я получаю следующую ошибку:

 awk: line 1: regular expression compile failed (missing operand) 

Поскольку используемые здесь диапазоны имеют фиксированную длину, вы можете просто выписать весь диапазон [0-9]{3} => [0-9][0-9][0-9] . И вместо (| |-|.) , ( |-|.)? – хотя я в замешательстве: вы допускаете какой-либо символ ( . ), кроме пробела и - ? Тогда это может быть просто .? так как пространство и - соответствуют . тем не мение. Если вы соответствуете буквальному периоду . тогда вы должны использовать [- .]? вместо этого (ведущий - это избегать интерпретации как диапазона символов). Так:

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

становится:

 ^\(?0[1-9][1-9]\)?[- .]?[1-9][0-9][0-9][0-9][- .][0-9][0-9][0-9][0-9]$