Wie kann ich meinem Grep-Skript einen Filter hinzufügen, um eine Zeichenfolge NICHT einzuschließen?

Wie kann ich meinem Grep-Skript einen Filter hinzufügen, um eine Zeichenfolge NICHT einzuschließen?

Ich arbeite an einem Skript, das die Registrar-Informationen von den Whois-Informationen einer Domain trennt. Bis jetzt funktioniert es ausreichend, aber ich möchte noch ein paar Dinge entfernen, damit es etwas übersichtlicher wird. Bei den meisten Domains funktioniert es. Hier ist mein Code:

#!/bin/bash
reg=$(whois "stackoverflow.com" | egrep -i 'Registrar|Sponsoring Registrar|Registrant|!internic')
printf "Below is my best attempt at finding the Registrar info:\n"
printf "$reg\n"

Und hier ist die Ausgabe:

Below is my best attempt at finding the Registrar info:
with many different competing registrars. Go to http://www.internic.net
   Registrar: NAME.COM, INC.
   Sponsoring Registrar IANA ID: 625
registrar's sponsorship of the domain name registration in the registry is
date of the domain name registrant's agreement with the sponsoring
registrar.  Users may consult the sponsoring registrar's Whois database to
view the registrar's reported date of expiration for this registration.
Registrars.

Ich habe in meinem Grep etwas Pseudocode hinzugefügt, um zu versuchen, die Zeichenfolge „internnic“ auszuschließen, um diese erste Zeile abzuschneiden. Ich möchte auch einen Weg finden, das sekundäre „Sponsoring des Registrars …“ usw. zu entfernen.

Ist es möglich, eine Zeichenfolge zu erkennen und diese Zeile nicht einzuschließen? Danke

Antwort1

Eine andere Möglichkeit besteht darin, genauer anzugeben, wonach Sie suchen. Zum Beispiel:

whois stackoverflow.com | grep -E '^[[:space:]]*(Registr(ar|ant|y)|Sponsoring).*: '

Dadurch werden nur Zeilen extrahiert, die mit einem optionalen Leerzeichen vor „Registrar“, „Registrant“, „Registry“ oder „Sponsoring“ beginnen, gefolgt von einer beliebigen Zahl (null oder mehr) beliebiger Zeichen, gefolgt von einem Doppelpunkt und einem Leerzeichen.

(Übrigens wird hier grep -Eanstelle von obsolet und deprecated verwendet egrep. Sie bewirken dasselbe.)

Ausgabe:

   Registrar: NAME.COM, INC.
   Sponsoring Registrar IANA ID: 625
Registry Domain ID: 108907621_DOMAIN_COM-VRSN 
Registrar WHOIS Server: whois.name.com 
Registrar URL: http://www.name.com 
Registrar Registration Expiration Date: 2016-12-26T19:18:07Z 
Registrar: Name.com, Inc. 
Registrar IANA ID: 625 
Registry Registrant ID:  
Registrant Name: Sysadmin Team 
Registrant Organization: Stack Exchange, Inc. 
Registrant Street: 110 William St , Floor 28 
Registrant City: New York 
Registrant State/Province: NY 
Registrant Postal Code: 10038 
Registrant Country: US 
Registrant Phone: +1.2122328280 
Registrant Email: [email protected] 
Registry Admin ID:  
Registry Tech ID:  
Registrar Abuse Contact Email: [email protected] 
Registrar Abuse Contact Phone: +1.1 7203101849 

Übrigens, wenn Sie jede Form der Textverarbeitung (einschließlich regulärer Ausdrücke) an Text aus langsamen Quellen (wie einer Datenbankabfrage oder einer Remotequelle wie Whois oder einem HTTP-Server) testen, ist es sinnvoll, den Befehl slow einmal auszuführen und die Ausgabe in eine Datei umzuleiten und dann mit der Datei zu testen. Wenn Sie das gewünschte Ergebnis haben, stellen Sie sicher, dass es mit direkt weitergeleiteten (neuen) Daten genauso funktioniert.

z.B

whois stackoverflow.com > so.txt

Weitere nützliche Dinge, die mit whoisder Ausgabe geschehen können:

  1. Extrahieren Sie den Domänenblock am Anfang von whos (Feldzeilen beginnen mit 4 Leerzeichen und enden mit einem Doppelpunkt):

    grep -Ei '^[[:blank:]]+.*:[[:blank:]]' so.txt

Ausgabe:

   Domain Name: STACKOVERFLOW.COM
   Registrar: NAME.COM, INC.
   Sponsoring Registrar IANA ID: 625
   Whois Server: whois.name.com
   Referral URL: http://www.name.com
   Name Server: CF-DNS01.STACKOVERFLOW.COM
   Name Server: CF-DNS02.STACKOVERFLOW.COM
   Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
   Updated Date: 26-nov-2015
   Creation Date: 26-dec-2003
   Expiration Date: 26-dec-2016
  1. Extrahieren Sie den Registrantenblock, beginnend mit dem Feld „Domänenname“ und endend mit dem Feld „Telefonnummer für den Kontakt zum Registrar-Missbrauch“:

    sed -n -e '/^Domain Name:/,/^Registrar Abuse Contact Phone:/p' so.txt

  2. beides zusammen:

    sed -n -e '/^Domain Name:/,/^Registrar Abuse Contact Phone:/p /^[[:blank:]]+.*:[[:blank:]] /p'

  3. awkDie Ausgabe aus all den oben genannten Programmen kann problemlos mit jedem anderen Textverarbeitungstool weiterverarbeitet werden, das so eingestellt werden kann, dass es einen Doppelpunkt ( :) als Feldtrennzeichen verwendet.

Antwort2

Verwenden Sie das Flag -v:

reg=`whois stackoverflow.com | egrep -i 'Registrar|Sponsoring Registrar|Registrant' | grep -v internic`

verwandte Informationen