Awk 从nslookup中Grep所有IP地址

Awk 从nslookup中Grep所有IP地址,awk,grep,Awk,Grep,我想获得google netblock的所有IP [root@ip-10-0-7-131 ~]# nslookup -q=TXT _netblocks.google.com 8.8.8.8 | grep 'ip4' 结果如下: _netblocks.google.com text = "v=spf1 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip :66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip

我想获得google netblock的所有IP

[root@ip-10-0-7-131 ~]# nslookup -q=TXT _netblocks.google.com 8.8.8.8 | grep 'ip4'
结果如下:

_netblocks.google.com   text = "v=spf1 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip :66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all"
但我的预期结果是:

64.233.160.0/19
66.102.0.0/20
........
我怎样才能实现我的目标

我尽最大努力只获得1个IP:(

使用
--perl regexp

$ nslookup -q=TXT _netblocks.google.com 8.8.8.8 | grep -Po 'ip4:\K\S+'
64.233.160.0/19
66.102.0.0/20
66.249.80.0/20
72.14.192.0/18
74.125.0.0/16
108.177.8.0/21
173.194.0.0/16
209.85.128.0/17
216.58.192.0/19
216.239.32.0/19

  • \K
    -放弃以前的匹配
  • [^\s]+
    -匹配除空格以外的任何序列
带有
--perl regexp

$ nslookup -q=TXT _netblocks.google.com 8.8.8.8 | grep -Po 'ip4:\K\S+'
64.233.160.0/19
66.102.0.0/20
66.249.80.0/20
72.14.192.0/18
74.125.0.0/16
108.177.8.0/21
173.194.0.0/16
209.85.128.0/17
216.58.192.0/19
216.239.32.0/19

  • \K
    -放弃以前的匹配
  • [^\s]+
    -匹配除空格以外的任何序列

    • 以下
      awk
      可能对您有所帮助

      awk '{while(match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\/[0-9]+/)){print substr($0,RSTART,RLENGTH);$0=substr($0,RSTART+RLENGTH+1)}}' Input_file
      


      下面的
      awk
      可能会对您有所帮助

      awk '{while(match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\/[0-9]+/)){print substr($0,RSTART,RLENGTH);$0=substr($0,RSTART+RLENGTH+1)}}' Input_file
      


      对于多字符RS、RT和gensub(),使用GNU awk:


      对于多字符RS、RT和gensub(),使用GNU awk:


      你救了我一天,伙计。谢谢罗曼。你能解释一下这个命令吗?记住它不是Perl正则表达式,它是PCRE正则表达式。@WiktorStribiżew,记住long选项被称为
      --Perl regexp
      (听起来和“Perl regexp”一模一样)@RomanPerekhrest它并没有改变在这种情况下不使用Perl的事实。R还使用
      Perl
      参数用PCRE正则表达式引擎解析模式。这与Perl无关(所有Perl用户在看到“Perl”标记时通常都会生气).你救了我一天,伙计。谢谢罗曼。你能解释一下这个命令吗?记住它不是Perl正则表达式,它是PCRE正则表达式。@WiktorStribiżew,记住long选项被称为
      --Perl regexp
      (听起来和“Perl regexp”一模一样)@RomanPerekhrest它并没有改变在这种情况下不使用Perl的事实。R还使用
      Perl
      参数用PCRE正则表达式引擎解析模式。这与Perl无关(所有Perl用户在看到“Perl”标记时通常都会生气)很好的回答。谢谢Ravinder。很好的回答。谢谢Ravinder。awk很强大。谢谢Ed。awk很强大。谢谢Ed。
      $ nslookup -q=TXT _netblocks.google.com 8.8.8.8 |
          awk -v RS='ip4:\\S+' 'RT{print gensub(/[^:]+:/,"",1,RT)}'
      64.233.160.0/19
      66.102.0.0/20
      66.249.80.0/20
      72.14.192.0/18
      74.125.0.0/16
      108.177.8.0/21
      173.194.0.0/16
      209.85.128.0/17
      216.58.192.0/19
      216.239.32.0/19