2011-04-04 63 views
2

之前的一切,我有以下幾點:慶典刪除字符

netstat -tuna | awk '{ print $4; }' | sed -e '1,2d' 

返回:字符:

10.20.26.143:51697 
10.20.26.143:51696 
10.20.26.143:51698 
10.20.26.143:51693 
10.20.26.143:51695 
10.20.26.143:51694 
:::22 
0.0.0.0:68 
0.0.0.0:49625 
0.0.0.0:5353 
:::48727 
:::5353 

返回所有開放端口的列表..如何將我的之前刪除一切嗎?請注意幾個:::而不是: 我只想讓它返回端口,刪除最後的所有文本:

我希望它在一個bash命令中。

非常感謝!

回答

2

只需用一個awk命令來完成。無需鏈太多

netstat -tuna | awk 'NR>2{ k=split($4,a,":");print a[k] }' 

netstat -tuna | awk 'NR>2{ sub(/.*:/,"",$4);print $4 }' 

或Ruby(1.9+)

如果你想唯一的端口
netstat -tuna | ruby -ane 'puts $F[3].sub(/.*:/,"") if $.>2' 

netstat -tuna | awk 'NR>2{ sub(/.*:/,"",$4); uniq[$4] }END{ for(i in uniq) print i }' 
+0

優秀的答案!非常感謝 – rmartinez 2011-04-04 23:51:27

1

因此很明顯, you can tuna network, but you can't tuna fish

以下將打印的所有開放端口

netstat -tuna | awk -F':+| +' 'NR>2{print $5}' 

下面將打印所有獨特開放的端口,即沒有按升序排列

netstat -tuna | awk -F':+| +' 'NR>2{print $5}' | sort -nu 
3

分類重複添加到您的sed命令:

';s/.*:/:/g' 

netstat -tuna | awk '{ print $4; }' | sed -e '1,2d;s/.*:/:/g' 

應該可以工作。