如何向 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”,以便剪掉第一行。我还想找到一种方法来删除辅助“注册商的赞助......”等。

是否可以检测一个字符串而不包含该行?谢谢

答案1

另一种选择是更具体地说明您正在寻找的内容。例如:

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

这仅提取以“Registrar”、“Registrant”、“Registry”或“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`

相关内容