Найдите порт отладки java из ps в Unix

При использовании: «ps -fu ${USER} | адрес grep» я могу найти процесс java, а также номер порта отладки, который появляется как часть командной строки процесса. Мой вопрос: как извлечь номер порта из командной строки, которая содержит много символов. Вопрос можно свести к тому, как извлечь слово между двумя строками. Я искал, как это сделать с помощью grep, awk или sed. Но все мои испытания закончились отображением всей командной строки процесса, а не только номера порта java.

Спасибо вперед.


person user3108139    schedule 16.12.2013    source источник


Ответы (1)


Вы можете извлечь порт отладки с помощью sed:

ps -fu ${USER} | grep address | sed 's/.*address=\([0-9]*\).*/\1/'

Обновление:

Выходные данные ps могут включать в себя саму команду grep. Вы можете снова использовать grep, чтобы отфильтровать это:

ps -fu ${USER} | grep address | sed 's/.*address=\([0-9]*\).*/\1/' | grep ^\d
person joemfb    schedule 16.12.2013
comment
Большое спасибо! В конце концов я использовал следующее, чтобы получить только номер порта: ps -fu ${USER} | адрес | sed 's/.*address=([0-9]*).*/\1/' | head -n 1. Собственно, теперь я заметил, что для некоторых серверов я вижу порт отладки после, а для некоторых перед строкой, которая печатает адрес grep. странный... - person user3108139; 18.12.2013
comment
И, наконец, эта команда отлично работает: ps -fu ${USER} | адрес | sed 's/.*address=\([0-9]*\).*/\1/' | grep -v ${ПОЛЬЗОВАТЕЛЬ} | grep -v ^[[:blank:]]*$ Еще раз спасибо за отличный ответ - person user3108139; 18.12.2013