【问题标题】:Extracting just the open port numbers from netstat output从 netstat 输出中仅提取开放端口号
【发布时间】:2017-09-23 02:46:42
【问题描述】:

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

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:追加 | awk -F ":" '{print $NF}'$NF 是最后一列的内容。
  • 谢谢.. 那也有效!!

标签: bash awk grep


【解决方案1】:

附加到你的行

| sed 's/.*://'

【讨论】:

    【解决方案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 开头)

    【讨论】:

      【解决方案3】:

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

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

      上面将为第 4 列提供端口,但如果您想在状态(LISTEN/TIME_WAIT)等之前获取第 4 列的输出,那么下面的内容也可能对您有所帮助。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多