Вы можете сделать это с помощью sed следующим образом:
echo 'Word: cat' |
sed -e '
s/Word:/&\n/
:loop
s/\n\([^a-zA-Z]*\)[a-zA-Z]/\1*\n/
tloop
s/\n\([^a-zA-Z]*\)$/\1/
'
Другой вариант заключается в том, чтобы уточнить, что именно вы ищете. Например:
whois stackoverflow.com | grep -E '^[[:space:]]*(Registr(ar|ant|y)|Sponsoring).*: '
Это извлекает только строки, которые начинаются с необязательного пробела перед 'Registrar', 'Registrant', 'Registry' или 'Sponsoring', за которым следует любое число (ноль или больше) любых символов, за которым следует двоеточие и пробел.
(BTW, здесь используется grep -E
, а не устаревший и устаревший egrep
. Они делают одно и то же.)
Output:
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: sysadmin-team@stackoverflow.com
Registry Admin ID:
Registry Tech ID:
Registrar Abuse Contact Email: abuse@name.com
Registrar Abuse Contact Phone: +1.1 7203101849
BTW, при тестировании любой формы обработки текста (включая регулярные выражения) на тексте из медленных источников (например, запрос к базе данных или из удаленного источника, такого как whois или http-сервер), полезно запустить команду slow один раз и перенаправить вывод в файл, а затем провести тест с этим файлом. Когда вы получите то, что хотите, убедитесь, что это работает так же, как и с прямыми (свежими) данными.
например
whois stackoverflow.com > so.txt
Другие полезные вещи, которые можно сделать с выводом whois
:
извлечение блока Domain в начале 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
извлеките блок Registrant, начиная с поля `Domain Name' и заканчивая полем 'Registrar Abuse Contact Phone':
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
или любого другого инструмента обработки текста, который можно заставить использовать символ двоеточия (:
) в качестве разделителя полей.
Используйте флаг -v:
reg=`whois stackoverflow.com | egrep -i 'Registrar|Sponsoring Registrar|Registrant' | grep -v internic`