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

Bash 仅从netstat输出中提取开放端口号,bash,awk,grep,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 如何仅从输出中提取最后的端口号?请使用awk尝试此方法,如果有帮助,请告诉我 netstat -ant | awk '/LISTEN/{sub(/.[^:]*/,"");gsub(/:| .*

此命令有以下输出:

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

如何仅从输出中提取最后的端口号?

请使用awk尝试此方法,如果有帮助,请告诉我

netstat -ant | awk '/LISTEN/{sub(/.[^:]*/,"");gsub(/:| .*/,"");print}'
上面将为第4列提供端口,但是如果您想在状态(侦听/时间等待)等之前获取第4列的输出,那么下面的一个可能也会对您有所帮助

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

用awk试试这个,如果对你有帮助,请告诉我

netstat -ant | awk '/LISTEN/{sub(/.[^:]*/,"");gsub(/:| .*/,"");print}'
上面将为第4列提供端口,但是如果您想在状态(侦听/时间等待)等之前获取第4列的输出,那么下面的一个可能也会对您有所帮助

netstat -ant | awk '/LISTEN/{split($5, a,":");print a[2]}'
附加到您的行中

| sed 's/.*://'
附加到您的行中

| sed 's/.*://'

您可以使用
rev
cut
执行此操作:

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开头)

您可以使用
rev
cut
执行此操作:

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开头)

从每行还是仅从最后一行?每行的端口号。使用awk:append
|awk-F:“{print$NF}”
$NF
是最后一列的内容。谢谢。。那也行!!从每一行还是仅从最后一行?每一行的端口号。使用awk:append
|awk-F:“{print$NF}”
$NF
是最后一列的内容。谢谢。。那也行!!