2016-09-01 3 views
1

Как напечатать значение группы соответствия Regex из командной строки терминала?Группа соответствия Echo Regex в командной строке bash

Я пытаюсь повторить идентификатор процесса запущенного порта, используя

lsof -n -i4TCP:$PORT | grep LISTEN 

Но это выводит в строку деталей, как этот

node 1234 myname 12u IPv6 0xf1c950b487699d0  0t0 TCP *:irdmi (LISTEN) 

мне нужно повторить из 1234 в одиночку, так что я могу убить этот PID, используя команду kill.

Я использовал grep -E, но я не могу распечатать группу захвата. Любая помощь приветствуется.

ответ

2

Вы можете использовать AWK для этого:

lsof -n -i4TCP:$PORT | awk '/LISTEN/{print $2}' 

/LISTEN/ выполнит это, когда линия имеет LISTEN в нем и $2 будет второе поле ввода, которое является ваш идентификатор процесса.

+0

Спасибо! Это помогло. Но я не могу передать это 'kill'. Вы думаете о какой-либо причине? Попытка сделать lsof -n -i4TCP: $ PORT | awk '/ LISTEN/{print $ 2}' | kill -9' –

+0

Использование: 'lsof -n -i4TCP: $ PORT | awk '/ LISTEN/{print $ 2}' | xargs kill -9' – anubhava

+1

Удивительный! Благодарю. –