Не работает регулярное выражение в 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}'