Bash удалить все перед персонажем - PullRequest
2 голосов
/ 05 апреля 2011

У меня есть следующее:

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 ]

3 голосов
/ 05 апреля 2011

добавить в вашу команду sed:

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

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

должно работать.

2 голосов
/ 05 апреля 2011

Просто сделайте это одной командой 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 }'
1 голос
/ 05 апреля 2011

Так что, очевидно, вы можете использовать тунец в сети, но вы не можете тунца

Следующее будет печатать все открытые порты

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

Следующее напечатаетвсе уникальные открытые порты, т.е. никакие дубликаты не отсортированы в порядке возрастания

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