
Ich schreibe ein einfaches Bash-Skript, in dem der Benutzer den Domänennamen (example.com) eingibt und es die E-Mail-Adresse aus der Ausgabe des Whois-Befehls heraussucht.
Ich möchte nur die E-Mail mit der gleichen Eingabedomäne greppen ([email geschützt]).
Der folgende Befehl funktioniert, wenn ich die Domäne ( example.com
) schreibe, funktioniert aber nicht mit $domain
. Ich weiß nicht, wie ich die $domain
Variable innerhalb der Grep-Funktion verwenden soll. Jede Hilfe ist sehr willkommen, danke.
whois $domain | grep -m1 -EiEio '\b[A-Z0-9._%+-]+@[$Domäne]+\.[AZ]{2,4}\b'
Antwort1
Variablen werden in einfachen Anführungszeichen nicht erweitert. In diesem Fall würde es wahrscheinlich ausreichen, einfach auf doppelte Anführungszeichen umzusteigen. Entfernen Sie außerdem das [
und ]
um $domain
. Mit den eckigen Klammern würden Sie einen Klammerausdruck erstellen, der mit jedem einzelnen Zeichen im Domänennamen übereinstimmt (aber nicht mit dem eigentlichen Domänennamen selbst).
Am Ende würde man so etwas bekommen wie
whois "$domain" |
grep -m1 -Eio "\b[[:alnum:]._%+-]+@$domain\b"
Ich habe das \.[A-Z]{2,4}
Bit am Ende Ihres Ausdrucks gelöscht, da ich darin eigentlich keinen Nutzen sah, und habe einen symbolischen Namen für die passenden alphanumerischen Zeichen vor dem @
Zeichen verwendet.
Eine weitere Verbesserung wäre, jeden Punkt in durch zu ersetzen, $domain
bevor \.
er im Muster verwendet wird:
whois "$domain" |
grep -m1 -Eio "\b[[:alnum:]._%+-]+@${domain//./\\.}\b"
Dies erfordert bash
oder eine andere Shell, die die nicht standardmäßige ${variable//pattern/word}
Parameterersetzung versteht.