Это решение внутри GNUmake, использующее gmtt , библиотеку для программирования общего назначения в GNUmake.
include gmtt-master/gmtt-master/gmtt.mk
ip-inc = $(strip $(call -ip-inc,$(word 1,$(subst ., ,$1)),$(word 2,$(subst ., ,$1)),$(word 3,$(subst ., ,$1)),$(word 4,$(subst ., ,$1))))
-ip-inc = $(if $(findstring :$4:,:255:),$(if $(findstring :$3:,:255:),$(if $(findstring :$2:,:255:),$(if $(findstring :$1:,:255:),0.0.0.0,$(call decimal-inc,$1).0.0.1),$1.$(call decimal-inc,$2).0.1),$1.$2.$(call decimal-inc,$3).1),$1.$2.$3.$(call decimal-inc,$4))
until-neq = $(if $(call str-eq,$(word 2,$1),$(call ip-inc,$2)),$(call until-neq,$(wordlist 2,2147483647,$1),$(call ip-inc,$2)),$2$(rparen) $(call gen-ip-range,$(wordlist 2,2147483647,$1)))
gen-ip-range = $(if $1,$(if $(call str-eq,$(call ip-inc,$(firstword $1)),$(word 2,$1)),$(lparen)$(firstword $1)-$(call until-neq,$1,$(firstword $1)),$(firstword $1) $(call gen-ip-range,$(wordlist 2,2147483647,$1))))
IP_LIST = 1.1.1.1 1.1.1.2 1.1.1.3 1.1.1.5 1.1.1.255 1.1.2.1 1.2.3.4 1.255.255.255 100.100.1.2 100.100.1.3
IP_RANGES := $(call gen-ip-range,$(IP_LIST))
$(info $(IP_RANGES))
По сути, это функциональная программа, которая преобразует отсортированный список IPадреса к вашему формату диапазона.Смешные IP-адреса с начальными 0 или несортированными списками в этом простом примере не обрабатываются (но могут быть с встроенными функциями gmtt).