如192.168.1.1 192.168.1.2 192.168.1.3 表示成 192.168.1.1..3
不同的段之间用逗号分隔,如:192.168.1.1..3,172.16.4.1..120
-
test@server:/tmp> cat file
- 18.11.11.11 peer upgrade172.16.1.123 peer upgrade172.16.1.128 peer upgrade172.16.1.140 peer upgrade172.16.1.141 peer upgrade172.16.1.205 peer upgrade192.168.1.206 peer upgrade192.168.1.4 peer upgrade192.168.10.4 peer upgrade
18.11.11.11..11,172.16.1.123..123,172.16.1.128..128,172.16.1.140..141,172.16.1.205..205,192.168.1.206..206,192.168.1.4..4,192.168.10.4..4
代码:
-
test@server:/tmp> cat -n file
-
1 18.11.11.11 peer upgrade172.16.1.123 peer upgrade172.16.1.128 peer upgrade172.16.1.140 peer upgrade172.16.1.141 peer upgrade172.16.1.205 peer upgrade192.168.1.206 peer upgrade192.168.1.4 peer upgrade192.168.10.4 peer upgrade
-
-
test@server:/tmp>grep -oP "(\d{1,3}\.){3}\d{1,3}" file|sort -t"." -n -k1 -k2 -k3 -k4|awk 'BEGIN{FS=".";ORS=","}{if(gensub(/[0-9]*$/,"","g")!=net||($4-last)!=1){if(net){print net first".."last};net=gensub(/[0-9]*$/,"","g");first=$4};last=$4}END{printf net first".."last"\n"}'
- 18.11.11.11..11,172.16.1.123..123,172.16.1.128..128,172.16.1.140..141,172.16.1.205..205,192.168.1.206..206,192.168.1.4..4,192.168.10.4..4
1.grep -oP "(\d{1,3}\.){3}\d{1,3}" file 将file中的ip提取出来
-
[root@test]# grep -oP "(\d{1,3}\.){3}\d{1,3}" file
-
18.11.11.11
-
172.16.1.123
-
172.16.1.128
-
172.16.1.140
-
172.16.1.141
-
172.16.1.205
-
192.168.1.206
-
192.168.1.4
- 192.168.10.4
-
[root@test 1123]# grep -oP "(\d{1,3}\.){3}\d{1,3}" file|sort -t"." -n -k1 -k2 -k3 -k4
-
18.11.11.11
-
172.16.1.123
-
172.16.1.128
-
172.16.1.140
-
172.16.1.141
-
172.16.1.205
-
192.168.1.206
-
192.168.1.4
- 192.168.10.4
3.awk语句的总体思想就是排序后逐个读入IP,比较前三个字段和第四个字段,只要前三个字段不同或者第四个字段的差值大于1就打印IP段。