sed - 是否可以在 sed 中为捕获组设置默认值?
问题描述
我想将版本号解析为市长、次要和补丁版本2019.10-devel-97
。2019.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 而不是空格?
解决方案
没有直接支持默认值,但您可以添加语句替换, )
为, 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
推荐阅读
- kubernetes - “yq”的未知命令“.network.genesisProfile”
- linux - 如何在 Linux 服务器上使用 pm2 运行 asp.net 核心应用程序
- jupyter - 没有标签的 JupyterLab 自动完成
- python-3.x - 神经机器翻译的一种变体
- javascript - 如何使用按钮输入的金额和总金额重置特定输入字段?
- javascript - javascript下载功能的单元测试
- java - 使用 XASession 时消息未从 JMS 队列中删除
- ios - 警告消息:如何删除不推荐使用的“withUnsafeMutableBytes”和不推荐使用的“withUnsafeBytes”?
- laravel - 覆盖 Laravel MessageBag 的问题
- java - 当用户身份验证未授权时发送自定义响应