bash 脚本 - 如何在 grep 中使用 $variable

bash 脚本 - 如何在 grep 中使用 $variable

我正在编写一个简单的 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。

相关内容