Как добавить фильтр в мой скрипт grep, чтобы НЕ включать строку?

Как добавить фильтр в мой скрипт grep, чтобы НЕ включать строку?

Я работаю над скриптом, который отделит информацию о регистраторе от whois доменов. Пока все работает, но есть несколько вещей, которые я хочу удалить, чтобы сделать его немного чище. Он работает на большинстве доменов. Вот мой код:

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

И вот что он выводит:

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.

Я добавил немного псевдокода в свой grep, чтобы попытаться исключить строку "internnic", чтобы отсечь эту первую строку. Я также хотел бы найти способ удалить вторичный "registrar's sponsorship..." и т. д.

Возможно ли обнаружить строку и не включать ее? Спасибо

решение1

Другой вариант — более конкретно указать, что именно вы ищете. Например:

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

При этом извлекаются только строки, начинающиеся с необязательного пробела перед словами «Регистратор», «Регистрант», «Регистрация» или «Спонсор», за которыми следует любое количество (ноль или более) любых символов, за которыми следует двоеточие и пробел.

(Кстати, здесь используются , grep -Eа не устаревшие и нерекомендуемые egrep. Они делают то же самое.)

Выход:

   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 

Кстати, при тестировании любой формы обработки текста (включая регулярные выражения) на тексте из медленных источников (например, запрос к базе данных или из удаленного источника, например, whois или http-сервер), полезно запустить медленную команду один раз и перенаправить вывод в файл, а затем протестировать файл. Когда у вас будет то, что вам нужно, убедитесь, что это работает так же с напрямую переданными (свежими) данными.

например

whois stackoverflow.com > so.txt

Другие полезные вещи, которые можно сделать с whoisвыводом:

  1. извлечь блок домена в начале whos (строки поля начинаются с 4 пробелов и заканчиваются двоеточием):

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

Выход:

   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. извлечь блок регистратора, начиная с поля «Имя домена» и заканчивая полем «Контактный телефон регистратора по вопросам злоупотреблений»:

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

  2. оба вышеперечисленных пункта вместе:

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

  3. Вывод всех вышеперечисленных команд можно легко обработать с помощью awkили любого другого инструмента обработки текста, который можно настроить на использование :символа двоеточия ( ) в качестве разделителя полей.

решение2

Используйте флаг -v:

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

Связанный контент