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