Bash使用whois提取名称服务器,包括它们是否在新行上

时间:2014-10-08 15:37:13

标签: bash

大家好我试图从网站上提取名称服务器,但是如果服务器在新线上,我似乎无法做到这一点,例如如果是这样的话,我可以做到....

nserver:      ns-a.somesite.com 176.195.2.100  
nserver:      ns-b.somesite.com 176.195.2.101

但如果是这样的话我就不能这样做了:

nserver:     
ns-a.somesite.com 176.195.2.100  
ns-b.somesite.com 176.195.2.101
ns-b.somesite.com 176.195.2.102

这是我到目前为止所做的:

whois ebay.com | grep -E "[Ss]ervers{0,1}:"

1 个答案:

答案 0 :(得分:0)

只获取名称服务器的名称:

whois ebay.com | grep -E "Name Server" | tr -d ' ' | awk -F":" '{ print $1 }'

您可能必须使用grep搜索条件,这取决于您输出的内容,但这应该可以让您获得99%的目标。

仅供参考,这将使用" Name Server"来删除行,它将从行中删除空格,然后它将用冒号分割行并打印第二个元素,即名称服务器。

更新

添加了更难的例子:

whois sans.edu | tr -d ' ' | awk -F: '{ if ($1 == "NameServer" && length($2)>0) print $2 ;else if ($0 == "NameServers:") found=1; else if (found == 1 && length($0)>0) print $0; else found=0 }'

这个有点麻烦。删除空格后让awk高兴。在awk中,我们执行以下操作:

  • 我们用冒号分开。
  • 如果$ 1相等" NameServer"和长度$ 2> 0然后我们打印$ 2(ebay.com示例)
  • 否则如果该行是" NameServers:" (sans.edu示例)然后我们设置了一个标志found=1
  • 否则如果设置了标志并且该行的长度不为0则打印该行
  • 否则将标志设置为0(假设我们找到了0个字符长度的行)