script bash - como usar uma variável $ no grep

script bash - como usar uma variável $ no grep

Estou escrevendo um script bash simples onde o usuário insere o nome de domínio (example.com) e recebe o endereço de e-mail da saída do comando whois.

Quero apenas receber o email com o mesmo domínio de entrada ([e-mail protegido]).

O comando abaixo funciona se eu escrever o domínio ( example.com), mas não funciona com $domain. Não sei como usar a $domainvariável dentro da função grep. Qualquer ajuda é muito apreciada, obrigado.

whois $domínio | grep -m1 -EiEio '\b[A-Z0-9._%+-]+@[$domínio]+\.[AZ]{2,4}\b'

Responder1

As variáveis ​​não são expandidas entre aspas simples. Neste caso, simplesmente mudar para aspas duplas provavelmente seria suficiente. Além disso, remova o [e ]ao redor $domain. Com os colchetes, você criaria uma expressão de colchetes que corresponderia a qualquer caractere único no nome de domínio (mas não ao próprio nome de domínio).

No final, você acabaria com algo como

whois "$domain" |
grep -m1 -Eio "\b[[:alnum:]._%+-]+@$domain\b"

Excluí o \.[A-Z]{2,4}bit no final da sua expressão porque na verdade não vi nenhuma utilidade nele e usei um nome simbólico para combinar o alfanumérico antes do @sinal.

Um aprimoramento adicional seria substituir qualquer ponto $domainpor \.antes de usá-lo no padrão:

whois "$domain" |
grep -m1 -Eio "\b[[:alnum:]._%+-]+@${domain//./\\.}\b"

Isso requer bashqualquer outro shell que entenda a ${variable//pattern/word}substituição de parâmetros não padrão.

informação relacionada