我正在编写一个简单的 bash 脚本,其中用户输入域名(example.com),然后从 whois 命令输出中 grep 电子邮件地址。
我只想 grep 具有相同输入域的电子邮件([电子邮件受保护])。
如果我编写域( example.com
),则以下命令有效,但不适用于$domain
.我不知道如何$domain
在 grep 函数中使用该变量。非常感谢任何帮助,谢谢。
whois $域名| grep -m1 -EiEio '\b[A-Z0-9._%+-]+@[$域名]+\.[AZ]{2,4}\b'
答案1
变量不会在单引号内展开。在这种情况下,只需切换到双引号就足够了。另外,删除[
和]
周围的$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}
参数替换的 shell。