Использование Perl:
perl -pe 's/\b(\d+)(?{$q=$1+1})(?:,(??{$q})\b(?{$p=$q++})){2,}/$1-$p/g'
Здесь используется регулярное выражение со встроенным кодом Perl через выражения (?{...})
и (??{...})
; первый просто оценивает встроенный код, а второй использует возвращаемое им значение в качестве шаблона. Полное описание см. в perlre(1)
.
Замените квантификатор {2,}
на +
, если вам также нужны диапазоны только из двух чисел (, например.1,2,7
->1-2,7
).