Awk

來自 netstat 的 grep 正則表達式埠範圍

  • July 6, 2017

在我的 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 )'

引用自:https://unix.stackexchange.com/questions/375824