#! /usr/local/bin/ruby vlan = "20,1500-1503,50,30-35,5-8,300-302" str = vlan.gsub(/-/, ".."). split(/,/). flat_map {|s| x = eval(s) x.is_a?(Range) ? x.to_a : x }.sort!.join(",") p str