Не работает регулярное выражение в BASH-Script

Не работает сложные регулярные выражения, только простые. При проверке на сайте регулряка работает, а в самом скрипте не работает.

read -p "Введите: " phone
echo $phone | awk '/^\+7\([0-9]{3}\)[0-9]{3}-[0-9]{2}-[0-9]{2}$/{print $1}'
echo $phone | awk '/[0-9]/{print $1}'

Надо сделать маску для проверки номера телефона, но я проверил около 8 масок, и не один не заработал.


Ответы (2 шт):

Автор решения: Deniska SosiSka

Вы можете воспользоваться встроеным regexp bash

read -p "Введите: " phone
echo "$([[ $phone =~ ^\+7\([0-9]{3}\)[0-9]{3}-[0-9]{2}-[0-9]{2}$ ]] && echo "Номер телефона корректен: $phone" || echo "Номер телефона некорректен")"

Если Вам всё же нужен именно awk то попробуйте, что-то вроде этого:

read -p "Введите: " phone
echo $phone | awk '/^\+7\([0-9]\{3\}\)[0-9]\{3\}-[0-9]\{2\}-[0-9]\{2\}$/ {print \$1}'

У awk есть отличие в синтаксисе построения выражений.

→ Ссылка
Автор решения: Saboteur

Вместо awk можно использовать grep -P (включить поддержку perl-compatible regex)

echo $phone | grep -P '^\+7\([0-9]{3}\)[0-9]{3}-[0-9]{2}-[0-9]{2}'
→ Ссылка