shell脚本获取本机端口号
#netstat -tln
-----输出如下-------
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:5801 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:427 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:2544 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 ::1:25 :::* LISTEN
-------------------------
想得到的输出结果如下:
5801,427,5901,111,2544,631,25,22
请问shell语句要怎么写?
[解决办法]
[nicenight@CSDN ~]# netstat -tln
[解决办法]
awk 'BEGIN{ORS=","}; NR>2{sub(".*:", "", $4); print $4}'
[解决办法]
awk '{if($1=="tcp"){num=split($4,A,":");B[A[num]]++;if(B[A[num]]==1)str=str""A[num]","}}END{print substr(str,1,length(str)-1)}'
#cat test.txt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:5801 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:427 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:2544 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 ::1:25 :::* LISTEN
-------------------------
#awk '{if($1=="tcp"){num=split($4,A,":");B[A[num]]++;if(B[A[num]]==1)str=str""A[num]","}}END{print substr(str,1,length(str)-1)}' test.txt
5801,427,5901,111,2544,631,25,22
[解决办法]
netstat -tln
------解决方案--------------------
awk -F '[: ]+' 'NR>2{printf $5","}'
netstat -tln
[解决办法]
awk -F '[: ]+' 'NR>2{printf $5","}END{print ""}'
netstat -tln
[解决办法]
awk 'NR>2{sub(".*:", print $4}'
[解决办法]
sort
[解决办法]
uniq
[解决办法]
tr '\r\n' ','