異なる数の数字の後に新しい行を挿入する

異なる数の数字の後に新しい行を挿入する

テキストファイル内の10個の数字、「-」、1〜4個の数字で構成される「数字」文字列の後に、新しい行または区切り文字を挿入する必要があります。

例:

blahblahrandomtext,1234567890-1234blahblah

しなければならない:

blahblahrandomtext,1234567890-1234, blahblah

または:

blahblahrandomtext,1234567890-1234

blahblah

最初の数値セットは常に10文字で、その後の数字は1、2、3、または4文字になります。

1234567890-1
1234567890-12
1234567890-123
1234567890-1234

同様の操作でsedを頻繁に使用しますが、最後の数値セット(1〜4文字の範囲)を処理する方法が見つかりません。

答え1

sed回避策(区切り記号の挿入,):

sed -E 's/(^|[^0-9])[0-9]{10}-[0-9]{1,4}/\1&, /' file
  • -E- 拡張正規表現の適用
  • (^|[^0-9])行の先頭または数字ではないものと一致します。これにより、10桁を超える数値が一致しません。
  • &- 一致する文字列全体を指します。

出力:

blahblahrandomtext,1234567890-1234, blahblah

答え2

固定桁数でこれを行う方法を知っている場合は、最大および最小の繰り返し文字を使用してこれを行う方法も知っておく必要があります。その\{\}位置内の最小値と最大値は、次のようにコンマで区切られます。

sed 's/[0-9]\{10\}-[0-9]\{1,4\}/&,\n/'

GNUの場合、sed他のバージョンではバックスラッシュと文字通り改行文字を使用してください。\n

関連情報