2016-10-06 25 views
0

我使用lsof -i | grep -E "(LISTEN|ESTABLISHED)"趨於活躍連接,我想第一個數字:
我如何從比賽( S d +) s每個lsof的輸出線

Coda\x202 551 username 46u IPv4 0x8c39e71075d65ab7  0t0 TCP 192.168.0.35:62283->192.168.0.187:6942 (ESTABLISHED) 
Coda\x202 551 username 47u IPv4 0x8c39e710759c6c57  0t0 TCP 192.168.0.35:6942->192.168.0.37:59833 (ESTABLISHED) 
Coda\x202 551 username 50u IPv4 0x8c39e710759c6c57  0t0 TCP 192.168.0.35:6942->192.168.0.37:59833 (ESTABLISHED) 
firefox  981 username 70u IPv4 0x8c39e71070895867  0t0 TCP 192.168.0.35:61753->ec2-52-35-204-251.us-west-2.compute.amazonaws.com:https ESTABLISHED) 
Google 16045 username 83u IPv4 0x8c39e71078aba387  0t0 TCP 192.168.0.35:62596->109.239.193.10:https (ESTABLISHED) 
Google 16045 username 84u IPv4 0x8c39e71075f52df7  0t0 TCP 192.168.0.35:63819->ham02s15-in-f195.1e100.net:https (ESTABLISHED) 

551,981和16045

因此,我可以將所有基於ID的連接分組並打印到分隔文件中。

擺弄周圍用正則表達式後,我得到這個表達
(\s\d+)\s它匹配我想要的數字,但我不能讓它進入我的bash腳本。
我不確定sed,awk或grep等是否更合適。

+0

什麼爲您提供了輸入您的預計輸出? – Inian

+0

如何使用tr + cut? 'lsof -i | tr -s''|砍-d''-f2,10' – Dana

回答

1

如果你想保持你的grep ...

lsof -i | grep -E "(LISTEN|ESTABLISHED)" | awk '{print $2}' 

在這裏,您正在使用awkprint第二列($2

+0

這個命令的輸出與我的回答有什麼不同?這個只是給'awk'增加了一個不必要的'grep'。 – anubhava

0

您可以用awk取代grep只打印第2列:

lsof -i | awk '/(LISTEN|ESTABLISHED)/{print $2}' 

這是假設冷杉和第二列沒有任何空格在lsof輸出。

+0

想要與OP澄清,可能他只想要唯一的條目嗎? – Inian

+1

好的,問題標題沒有提及任何關於唯一身份的內容。但是如果需要的話,awk將能夠處理這個問題。 – anubhava

0
lsof -i | awk '/LISTEN|ESTABLISHED/&&!a[$2]++{print $2}' 
相關問題