bash スクリプト - grep で $variable を使用する方法

bash スクリプト - grep で $variable を使用する方法

ユーザーがドメイン名 (example.com) を入力すると、whois コマンドの出力から電子メール アドレスが grep される簡単な bash スクリプトを作成しています。

同じ入力ドメインのメールのみをgrepしたい([メールアドレス])。

以下のコマンドは、ドメイン ( example.com) を記述すると機能しますが、 では機能しません$domain。 grep 関数内で変数を使用する方法がわかりません$domain。 ご協力いただければ幸いです。ありがとうございます。

whois $ドメイン | grep -m1 -EiEio '\b[A-Z0-9._%+-]+@[$ドメイン]+\.[AZ]{2,4}\b'

答え1

変数は一重引用符内では展開されません。この場合、単に二重引用符に切り替えるだけで十分でしょう。また、 の周りの[andを削除します。角括弧を使用すると、ドメイン名の任意の 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}パラメータ置換を理解する またはその他のシェルが必要です。

関連情報