
我正在編寫一個簡單的 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。