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

Вы можете сделать это с помощью 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/
' 
1
20.05.2016, 17:31
2 ответа

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

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:

  1. извлечение блока 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
  1. извлеките блок Registrant, начиная с поля `Domain Name' и заканчивая полем 'Registrar Abuse Contact Phone':

    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 или любого другого инструмента обработки текста, который можно заставить использовать символ двоеточия (:) в качестве разделителя полей.

1
27.01.2020, 23:35

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

reg=`whois stackoverflow.com | egrep -i 'Registrar|Sponsoring Registrar|Registrant' | grep -v internic`
1
27.01.2020, 23:35

Теги

Похожие вопросы