从netstat输出中仅提取开放端口号

时间:2017-09-22 18:13:05

标签: bash awk grep

我从这个命令得到以下输出:

netstat -ant |grep LISTEN | awk '{ print $4 }' 
0.0.0.0:111
192.168.122.1:53
0.0.0.0:22
127.0.0.1:631
127.0.0.1:25
:::111
:::22
::1:631
::1:25

如何从输出中提取最后一个端口号?

3 个答案:

答案 0 :(得分:2)

附加到您的行

| sed 's/.*://'

答案 1 :(得分:2)

您可以使用revcut执行此操作:

netstat -ant | awk '/LISTEN/ { print $4 }' | rev | cut -f1 -d: | rev
  • 第一个rev反转输出,以便将最后一个字段翻转到前面
  • cut -f1提取第一个字段
  • 最终rev将字符串反转回其原始方向

你也可以只用awk来做,效率更高:

netstat -ant | awk '/LISTEN/ { n = split($4, a, ":"); print a[n] }'
  • split按分隔符拆分字符串并将其存储在数组中并返回数组的大小
  • print a[n]打印数组的最后一个元素(注意数组索引在awk中以1开头)

答案 2 :(得分:0)

尝试使用awk并告诉我这是否对您有帮助。

netstat -ant | awk '/LISTEN/{sub(/.[^:]*/,"");gsub(/:| .*/,"");print}'

上面会为第4列提供端口,但是如果你想在状态(LISTEN / TIME_WAIT)等之前获取第4列的输出,那么下面也可以帮助你。

netstat -ant | awk '/LISTEN/{split($5, a,":");print a[2]}'