在我的 netstat 输出中,我想提取32000-64000
.我已经尝试过egrep "^[3,4,5,6]"
,但我需要从 开始32000
。我应该使用awk
某种脚本吗?
Linux# netstat -nau
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 10.0.0.20:55238 0.0.0.0:*
udp 0 0 10.0.0.20:55240 0.0.0.0:*
udp 0 0 10.0.0.20:31242 0.0.0.0:*
udp 0 0 10.0.0.20:55244 0.0.0.0:*
udp 0 0 10.0.0.20:32246 0.0.0.0:*
udp 0 0 10.0.0.20:55248 0.0.0.0:*
udp 0 0 10.0.0.20:12250 0.0.0.0:*
udp 0 0 10.0.0.20:19252 0.0.0.0:*
答案1
正如netstat
已弃用的那样,为什么不尝试它的高级后继者ss
.
ss -nau '( sport >= 32000 and sport <= 64000 )'
答案2
awk解决方案:
netstat -nau | awk -F'[[:space:]]+|:' 'NR>2 && $5>=32000 && $5<=64000'
您的情况的输出将如下:
udp 0 0 10.0.0.20:55238 0.0.0.0:*
udp 0 0 10.0.0.20:55240 0.0.0.0:*
udp 0 0 10.0.0.20:55244 0.0.0.0:*
udp 0 0 10.0.0.20:32246 0.0.0.0:*
udp 0 0 10.0.0.20:55248 0.0.0.0:*
-F'[[:space:]]+|:'
- 字段分隔符NR>2 && $5>=32000 && $5<=64000
- 检查端口号是否在所需范围内
选择埃格雷普解决方案:
netstat -nau | egrep ':(3[2-9]|[45][0-9])[0-9]{3}|6[0-3][0-9]{3}|64000'
(3[2-9]|[45][0-9])[0-9]{3}
- 将涵盖从32000
到 的数字59999
6[0-3][0-9]{3}|64000
- 将涵盖从60000
到 的数字64000