截取netstat信息的服务和端口信息

需求:

截取netstat信息的服务和端口信息。 群里大佬提供:

netstat -tnpl|awk 'NF==7{sub(/.*:/,"",$4);sub(/[0-9]*\//,"",$NF);print $4,$NF}'

netstat -tnpl|awk '/^tcp/{sub(/.*:/,"",$4);sub(/[0-9]*\//,"",$7);print $4,$7}'

netstat -tnpl|awk '/^tcp/{sub(/.*:/,"",$4);sub(/[0-9]*\//,"",$7);if(NF==7)print $4,$7;else print $4,$7,$NF}'

分析:就是做了个替换,第四列的:前面的替换成空,第七列的pid/ 替换成空,之后判断每行多少列(因为有些行有>7列的),分开输出就行。

这个 sub 是切 :号之前的东西,替换为空。

 

第7列 切 /号前的数字内容,换成空。

 

群大佬推荐的书籍: Linux Shell脚本攻略(第3版) 图灵版、 Linux Shell 实例精解、 UNIX.shell范例精解(第4版)

另个大佬给个代码:

netstat -tnpl|awk 'BEGIN{FS="[ ]+|:|/"}NR>2{if(/^tcp[^6]/&&NF=10){print 5,$NF}else{print $7,$(NF-1)}}'

和 (用数组可以去重)

netstat -tnpl|awk 'BEGIN{FS="[ ]+|:|/"}NR>2{if(/^tcp[^6]/&&NF=10)arr[$5]=$NF;else arr[$7]=$(NF-1)}END{for(i in arr)print i,arr[i]}'


Perl的写法:
netstat -tnpl| perl -nE 'printf "$1 $2\n" if /^tcp.*(?<=:)(\d+)(?=\s).*(?<=\/)(\w+)/'

END

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值