2013-12-16 35 views
1

當使用:「ps -fu $ {USER} | grep address」時,我可以找到java進程以及作爲進程命令行一部分出現的調試端口號。 我的問題是,如何從包含許多字符的命令行中提取端口號。這個問題可以概括爲我怎樣才能提取2個字符串之間的單詞。我一直在尋找如何使用grep,awk或sed來做到這一點。但是,我的所有試用都以顯示整個流程命令行而不僅僅是java端口號結束。從Unix中的ps查找java調試端口

提前感謝。

+0

這本來是最有幫助的,如果你會加入這樣一個命令行的樣本。我只能假設它是'java -Xdebug -Xrunjdwp:transport = dt_socket,address = 8998,server = y -jar myapp.jar',但我當然只是在猜測。 – fvu

+1

可能重複的[如何在兩個單詞之間提取文本在UNIX?](http://stackoverflow.com/questions/6127786/how-to-extract-text-between-two-words-in-unix) –

+0

請永遠在發佈新問題之前先進行搜索,並且請嘗試詢問真正的問題(在您的情況中,如何提取兩個字符串之間的單詞),而不是從上下文開始。如果你刪除了上下文,你也會很快注意到這個問題已經被問到了。 –

回答

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 
+0

非常感謝!最終我使用以下來獲取端口號:ps -fu $ {USER} | grep地址| sed's /.* address = \([0-9] * \)。*/\ 1 /'|頭-n 1.實際上,現在我注意到,對於某些服務器,我可以在打印「grep地址」的行之前和之後看到調試端口。奇怪... – user3108139

+0

最後這是我發現完美工作的命令: ps -fu $ {USER} | grep地址| sed's /.* address = \([0-9] * \)。*/\ 1 /'| grep -v $ {USER} | grep -v「^ [[:blank:]] * $」 再次感謝您的出色答案 – user3108139