bash删除字符前的所有内容

时间:2011-04-04 23:41:05

标签: bash sed awk grep

我有以下内容:

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命令中使用它。

提前多多感谢!

3 个答案:

答案 0 :(得分:3)

添加到您的sed命令:

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

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

应该有用。

答案 1 :(得分: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 }'

答案 2 :(得分: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