¿Cómo puedo agregar un filtro a mi script grep para NO incluir una cadena?

¿Cómo puedo agregar un filtro a mi script grep para NO incluir una cadena?

Estoy trabajando en un script que separará la información del registrador del whois de un dominio. Hasta ahora está funcionando bastante, pero hay algunas cosas que quiero eliminar para que quede un poco más limpio. Funciona en la mayoría de dominios. Aquí está mi código:

#!/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"

Y esto es lo que produce:

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.

Agregué algo de psudocódigo en mi grep para intentar excluir la cadena "internnic", para cortar esa primera línea. También me gustaría encontrar una manera de eliminar el "patrocinio del registrador..." secundario, etc.

¿Es posible detectar una cadena y no incluir esa línea? Gracias

Respuesta1

Otra opción es ser más específico sobre lo que estás buscando. Por ejemplo:

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

Esto extrae solo las líneas que comienzan con un espacio en blanco opcional antes de 'Registrador', 'Registrante', 'Registro' o 'Patrocinador', seguido de cualquier número (cero o más) de cualquier carácter, seguido de dos puntos y un espacio.

(Por cierto, esto utiliza grep -Een lugar del obsoleto y obsoleto egrep. Hacen lo mismo).

Producción:

   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 

Por cierto, al probar cualquier forma de procesamiento de texto (incluidas expresiones regulares) en texto de fuentes lentas (como una consulta de base de datos o de una fuente remota como whois o un servidor http), es útil ejecutar el comando lento una vez y redirigir la salida a un archivo, luego pruebe con el archivo. Cuando tenga lo que desea, asegúrese de que funcione igual con datos directamente canalizados (nuevos).

p.ej

whois stackoverflow.com > so.txt

Otras cosas útiles que hacer con whoisla salida:

  1. extraiga el bloque de dominio al comienzo de whos (las líneas de campo comienzan con 4 espacios y terminan con dos puntos):

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

Producción:

   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. extraiga el bloque de registrante, que comienza con el campo "Nombre de dominio" y termina con el campo "Teléfono de contacto de abuso del registrador":

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

  2. los dos anteriores juntos:

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

  3. Los resultados de todo lo anterior se pueden procesar fácilmente con awko cualquier otra herramienta de procesamiento de texto que pueda utilizar un :carácter de dos puntos ( ) como separador de campo.

Respuesta2

Utilice la bandera -v:

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

información relacionada