首页 > 解决方案 > 是否可以在 sed 中为捕获组设置默认值?

问题描述

我想将版本号解析为市长、次要和补丁版本2019.10-devel-972019.10.1

补丁级别是可选的。

我想出了以下正则表达式:

sed -E 's/([0-9]+).([0-9]+).?([0-9]+)?.*/VERSION_MACRO(\1, \2, \3)/'

对于 2019.10.1,这可以正确打印VERSION_MACRO(2019, 10, 1),但如果没有补丁级别,我会得到VERSION_MACRO(2019, 10, ).

有没有办法将捕获组的默认值设置为 0 而不是空格?

标签: sed

解决方案


没有直接支持默认值,但您可以添加语句替换, ), 0).

sed -E -e 's/([0-9]+).([0-9]+).?([0-9]+)?.*/VERSION_MACRO(\1, \2, \3)/' \
    -e 's/, \)/, 0)/' file

sed不过,它有点像只写的语言,也许您最好使用高级语言进行任何重要的文本处理。

awk -F . '{ OFS = ", ";
    print "VERSION_MACRO(" $1, $2, 0+$3 ")"}' file

推荐阅读