使用sed对数字进行分组:下划线不';对我不起作用

使用sed对数字进行分组:下划线不';对我不起作用,sed,number-formatting,Sed,Number Formatting,我试着把数字分组;只有在使用下划线字符时才会出现问题: $ echo "12345678912345678901234567890" | sed ':a;s/\B[0-9]\{3\}\($\|_\)/_&/;ta' 当使用其他字符时,工作完成: $ echo "12345678912345678901234567890" | sed ':a;s/\B[0-9]\{3\}\($\|-\)/-&/;ta' 此外: ……等等。我尝试过替换下划

我试着把数字分组;只有在使用下划线字符时才会出现问题:

$ echo "12345678912345678901234567890" | sed ':a;s/\B[0-9]\{3\}\($\|_\)/_&/;ta'
当使用其他字符时,工作完成:

$ echo "12345678912345678901234567890" | sed ':a;s/\B[0-9]\{3\}\($\|-\)/-&/;ta'
此外:

……等等。我尝试过替换下划线,但它的效果相同。

这可能适合您(GNU-sed):


使用GRADE(
*
)调用回溯,然后查找4个连续数字,并在第一个和第二个数字之间插入下划线,重复。

请添加预期输出
\B
\B
的否定版本,单词边界<代码>单词包括字母数字字符和下划线字符。因此,
\B
匹配数字之间的间距以及数字和下划线之间的间距。我知道\B的含义,但似乎没有注意到它引起的问题。。。这是一个无限循环,不是吗?与其应用
ta
命令,不如复制替换并观察结果。注意:
goto
可能是无限的,永远不会返回。GNU-sed中的
--debug
选项也可能会启发管道到less<代码>sed'…'文件--调试|更少
$ echo "12345678912345678901234567890" | sed ':a;s/\B[0-9]\{3\}\($\|:\)/:&/;ta'
sed -E ':a;s/(.*[0-9])([0-9]{3})/\1_\2/;ta' file