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。

相關內容