Awk
來自 netstat 的 grep 正則表達式埠範圍
在我的 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:*
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
- 檢查埠號是否在所需範圍內替代egrep解決方案:
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
正如
netstat
已被棄用的那樣,為什麼不嘗試它的優越繼任者,ss
.ss -nau '( sport >= 32000 and sport <= 64000 )'