【问题标题】:How to get the lines from a list of IP addresses which has the fourth octet more than 10?如何从 IP 地址列表中获取第四个八位字节超过 10 个的行?
【发布时间】:2016-01-18 12:41:09
【问题描述】:

我有以下输出:

netman@netman:~/Desktop$ nmap -p 80,443,8080 --open 172.20.74.0/24 | grep report | cut -d"(" -f2 | cut -d")" -f1 | sed '/172.20.74.(0-9)/d'
172.20.74.4
172.20.74.11
172.20.74.40
172.20.74.212

我需要一种方法(sed 或 awk 或任何其他命令)来获取 172.20.74.11 - 172.20.74.255 范围内的 IP 地址

我尝试了 Sed 和其他命令,如 grep,但无济于事。

提前致谢

【问题讨论】:

  • awk 'BEGIN{a="172.20.74.";for(i=11;i
  • @A-Ray 我想他想过滤他的列表以找到最后一个八位字节 >10
  • 你可以用一个扩展的正则表达式来做到这一点,但我的 unix 盒子不这样做,所以在我的 unix 盒子上做这件事的最简单方法是过滤掉你不想要的那些:@987654322 @

标签: linux unix awk sed ip-address


【解决方案1】:
. . . | awk '-F.' '$4>10' 

产生输出

172.20.74.11
172.20.74.40
172.20.74.212

来自您上面包含的 4 个 IP。我是否正确理解了您的需求?

这种方法依赖于 awks 对编号字段进行操作的能力,该能力基于为 FS(字段分隔符)指定备用值。我已经使用命令行选项'-F.' 来设置FS

因为你想要第四个字段,我们只需要比较$4>10。仅打印与该比较匹配的行。

一个长手版本是

 . . . | awk 'BEGIN{FS="."}{if ($4 > 10) print $0}'

其中$0 指的是整行输入,$4 指的是行中的第 4 个字段,当使用“.”时作为字段分隔符,默认操作是处理(测试)所有输入行(在本例中,来自您的管道)。

IHTH

【讨论】:

  • 大家好,感谢您的努力和回答。是的,这就是我要找的。在我的 awk 命令中,我缺少“分隔符”点。谢谢你指路... Dharmesh
  • @DharmeshMithbavkar :我很高兴这有帮助。我已经更详细地编辑了答案,所以请检查一下。祝大家好运。
猜你喜欢
  • 1970-01-01
  • 2020-10-17
  • 2020-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 2018-12-01
  • 1970-01-01
相关资源
最近更新 更多