次のように、カンマで区切られた数値文字列があります。
1,2,3,5,6,7,8,9,12,14
bash
次のように、隣接する数字を範囲/ハイフン項目に結合するスクリプトで使用するコマンドを探しています。
1-3,5-9,12,14
初期文字列は昇順にソートされます。
ベストアンサー1
パールの使用:
perl -pe 's/\b(\d+)(?{$q=$1+1})(?:,(??{$q})\b(?{$p=$q++})){2,}/$1-$p/g'
(?{...})
これは、and式を介して組み込みPerlコードで正規表現を使用することです(??{...})
。最初は埋め込みコードのみを評価し、2番目はパターンとして返す値を使用します。perlre(1)
完全な説明については、リソースを参照してください。
2つの数字のみを含む範囲(例: - > )が必要な場合は、数量子{2,}
をに置き換えます。+
1,2,7
1-2,7