【发布时间】:2021-04-12 06:48:15
【问题描述】:
我正在尝试对数字进行分组;只有在使用下划线字符时才会出现问题:
$ 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'
...等等。我尝试转义下划线,但效果相同。
【问题讨论】:
-
请添加您的预期输出
-
\B是\b的否定版本,字边界。Word包括字母数字字符和下划线字符。因此\B匹配数字之间的间隔以及数字和下划线之间的间隔。 -
我知道\B的含义,但我似乎没有注意到它引起的问题......这是一个无限循环,不是吗?
-
与其应用
ta命令,不如复制替换并观察结果。注:goto可能是无限的并且永远不会返回。 GNU sed 中的--debug选项也可以通过管道传递到更少。sed '...' file --debug | less
标签: sed number-formatting