【问题标题】:Grouping numbers with sed: underscore doesn't work to me用 sed 对数字进行分组:下划线对我不起作用
【发布时间】: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


【解决方案1】:

这可能对你有用(GNU sed):

sed -E ':a;s/(.*[0-9])([0-9]{3})/\1_\2/;ta' file

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

【讨论】:

    猜你喜欢
    • 2016-10-09
    • 2012-07-19
    • 2019-09-30
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    相关资源
    最近更新 更多