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

Posted

技术标签:

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

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

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

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

【讨论】:

以上是关于用 sed 对数字进行分组:下划线对我不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥灯箱 jQuery 插件对我不起作用?

DScintilla,代码折叠对我不起作用

- (BOOL)loadShaders 方法对我不起作用

为啥 webpack 代码拆分对我不起作用?

React 本机人脸检测对我不起作用(iOS)

beginSheet 方法对我不起作用