
Я пишу простой bash-скрипт, в котором пользователь вводит доменное имя (example.com), а он извлекает адрес электронной почты из вывода команды whois.
Мне нужно выполнить grep только для адресов электронной почты с тем же входным доменом ([email protected]).
Следующая команда работает, если я пишу домен ( example.com
), но не работает с $domain
. Я не знаю, как использовать $domain
переменную в функции grep. Любая помощь будет очень кстати, спасибо.
whois $домен | grep -m1 -EiEio '\b[A-Z0-9._%+-]+@[$домен]+\.[AZ]{2,4}\b'
решение1
Переменные не раскрываются в одинарных кавычках. В этом случае, вероятно, будет достаточно просто перейти на двойные кавычки. Также удалите [
and ]
вокруг $domain
. С квадратными скобками вы создадите выражение в скобках, которое будет соответствовать любому отдельному символу в имени домена (но не самому имени домена).
В конце концов, у вас получится что-то вроде
whois "$domain" |
grep -m1 -Eio "\b[[:alnum:]._%+-]+@$domain\b"
Я удалил \.[A-Z]{2,4}
часть в конце вашего выражения, потому что на самом деле не видел в ней никакого применения, и использовал символическое имя для сопоставления буквенно-цифровых символов перед знаком @
.
Дополнительным улучшением будет замена любой точки на $domain
перед \.
ее использованием в шаблоне:
whois "$domain" |
grep -m1 -Eio "\b[[:alnum:]._%+-]+@${domain//./\\.}\b"
Для этого требуется bash
или любая другая оболочка, которая понимает нестандартную ${variable//pattern/word}
подстановку параметров.