grep regex port range from netstat

Я бы сделал это по-другому.

Dirarray= ("dirA" "dirB")
for Dir in "${Dirarray[@]}"; do
    cd "$Dir"
    for file in "${filearray[@]}"; do
# Here a change. If "$file" exists...
        if [[ -e "$file"]]; then
            : # do something
        fi
     done
done

Дополнительные параметры проверки файлов см. В man test .

Причина в том, что этот способ намного проще. Ну, пока массив не содержит регулярных выражений.

3
06.07.2017, 22:39
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-проверяет, находится ли номер порта в нужном диапазоне


Альтернативное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

  • .
1
27.01.2020, 21:21

Поскольку netstatустарел, почему бы не попробовать его превосходящего преемника, ss.

ss -nau '( sport >= 32000 and sport <= 64000 )'
2
27.01.2020, 21:21

Теги

Похожие вопросы