скрипт bash - как использовать $variable в grep

скрипт bash - как использовать $variable в grep

Я пишу простой 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}подстановку параметров.

Связанный контент