在不同数量的数字字符后插入新行

在不同数量的数字字符后插入新行

我需要在文本文件中的由 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

相关内容