Como posso adicionar um filtro ao meu script grep para NÃO incluir uma string?

1

Estou trabalhando em um script que separará as informações do Registrador de um domínio whois. Até agora está funcionando o suficiente, mas há algumas coisas que eu quero remover para que seja um pouco mais limpo. Funciona na maioria dos domínios. Aqui está o meu 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"

E aqui está o que é produzido:

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.

Eu adicionei um código psudo no meu grep para tentar excluir a string "internnic", para cortar a primeira linha. Eu também gostaria de encontrar uma maneira de remover o "patrocínio do registrador ...", etc.

É possível detectar uma string e não incluir essa linha? Obrigado

    
por Egrodo 20.05.2016 / 16:31

2 respostas

1

Outra opção é ser mais específico sobre o que você está procurando. Por exemplo:

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

Isso extrai apenas as linhas que começam com espaço em branco opcional antes de 'Registrador', 'Registrante', 'Registro' ou 'Patrocínio', seguido por qualquer número (zero ou mais) de qualquer caractere, seguido por dois pontos e um espaço.

(BTW, isso usa grep -E em vez do obsoleto e depreciado egrep . Eles fazem a mesma coisa.)

Saída:

   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 

BTW, enquanto testa qualquer forma de processamento de texto (incl. expressões regulares) no texto de fontes lentas (como uma consulta de banco de dados ou de uma fonte remota como whois ou um servidor http), é útil executar o comando lento uma vez redirecionar a saída para um arquivo e, em seguida, testar o arquivo. Quando você tem o que deseja, verifique se funciona da mesma forma com dados enviados diretamente (novos).

por exemplo.

whois stackoverflow.com > so.txt

Outras coisas úteis para fazer com whois output:

  1. extraia o bloco de domínio no início de whos (as linhas de campo começam com 4 espaços e terminam com dois pontos):

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

Saída:

   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. Extraia o bloqueio de registrantes, começando com o campo "Nome do domínio" e terminando com o campo "Telefone de contato com o registrador de abuso":

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

  2. ambos os acima juntos:

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

  3. A saída de todos os itens acima pode ser facilmente processada com awk ou qualquer outra ferramenta de processamento de texto que possa ser usada para usar um caractere de dois-pontos ( : ) como separador de campo.

por 21.05.2016 / 02:23
2

Use o sinalizador -v:

reg='whois stackoverflow.com | egrep -i 'Registrar|Sponsoring Registrar|Registrant' | grep -v internic'
    
por 20.05.2016 / 16:48