Извлечь номер порта из команды netstat - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть следующий вывод команды netstat:

netstat -taunp | grep hgd
tcp        0      0 10.1.1.1:601            10.1.1.2:935            ESTABLISHED 842/hgd
tcp        0      0 10.1.1.1:55394          10.1.1.2:3490           ESTABLISHED 842/hgd

Я хочу извлечь из этого вывода номер порта 601 . обратите внимание, что этот порт является случайным, а порт 935 жестко запрограммирован и существует во многих строках netstat

какие-либо предложения?

Ответы [ 3 ]

1 голос
/ 04 ноября 2019

Вот как мне нравится это делать:

netstat -taunp | awk '/hgd/ && $5~/:935$/ {split($4,a,":");print a[2]}'

grep не нужен, поскольку awk может самостоятельно найти hgd:

  • /hgd/ && $5~/:935$/ найдите строку с hgd, а пятое поле заканчивается :935, затем выполните:
  • split($4,a,":") разделите 4 поля в массиве a, используя : в качестве разделителя
  • print a[2] выведите вторую часть массива a, где расположены порты.
1 голос
/ 04 ноября 2019

Awk - это инструмент для того, что вы хотите:

netstat -taunp | grep <your_grep> | awk '{print $4}' | awk -F ':' '{print $2}'
0 голосов
/ 04 ноября 2019

Вы можете использовать

netstat -taunp | awk -F'[:[:space:]]+' '/hgd/ && $7 == "935" { print $5 }'

См. онлайн-демонстрацию

Подробнее

  • -F'[:[:space:]]+'- устанавливает в качестве разделителя полей одно или несколько вхождений : и / или пробелов
  • '/hgd/ && $7 == "935" - если строка содержит hgd и поле 7 равно 935, то
  • { print $5 }' - печать поля 5.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...