Получение аргумента в определенной позиции для дальнейшей конвейерной обработки

1

Иногда мне нужно убить определенный процесс, который прослушивает известный порт, чтобы освободить этот порт.

Когда я выполняю sudo lsof -n -i :1084, чтобы получить PID процесса, прослушивающего порт 1084, я получаю следующий результат

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1603   pi   11u  IPv4  26101      0t0  TCP *:1084 (LISTEN)
sshd    1603   pi   12u  IPv6  26102      0t0  TCP *:1084 (LISTEN)

С помощью grep -P 'IPv4.+LISTEN'я могу получить строку, где процесс прослушивает этот порт, используя IPv4

проведение

sudo lsof -n -i :1084 | grep -P 'IPv4.+LISTEN'

возвращается

sshd    1603   pi   11u  IPv4  26101      0t0  TCP *:1084 (LISTEN)

Как я могу теперь получить, 1603чтобы я мог передать это kill?

Я пытался с grep, sed ( sudo lsof -n -i :1084 | grep -P 'IPv4.+LISTEN' | sed -E 's/sshd\ +(\d+)\ /\1/g'), но я просто не знаю как.

Должна быть команда, sudo lsof -n -i :1084 | grep -P 'IPv4.+LISTEN' | xargs --no-run-if-empty kill {$second_argument}'которая позволила бы мне сохранить эту цель, какие-либо идеи?

Кроме того, если это не решение sed, на что будет sedпохоже решение, использующее (я мог бы использовать это в других случаях)?

Даниэль Ф
источник
Как дать аргументы для уничтожения через канал: stackoverflow.com/questions/8653921/…
Даниэль Ф

Ответы: