Я работаю над скриптом, который отделит информацию о регистраторе от 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
выводом:
извлечь блок домена в начале 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
извлечь блок регистратора, начиная с поля «Имя домена» и заканчивая полем «Контактный телефон регистратора по вопросам злоупотреблений»:
sed -n -e '/^Domain Name:/,/^Registrar Abuse Contact Phone:/p' so.txt
оба вышеперечисленных пункта вместе:
sed -n -e '/^Domain Name:/,/^Registrar Abuse Contact Phone:/p /^[[:blank:]]+.*:[[:blank:]] /p'
Вывод всех вышеперечисленных команд можно легко обработать с помощью
awk
или любого другого инструмента обработки текста, который можно настроить на использование:
символа двоеточия ( ) в качестве разделителя полей.
решение2
Используйте флаг -v:
reg=`whois stackoverflow.com | egrep -i 'Registrar|Sponsoring Registrar|Registrant' | grep -v internic`