shell - 如何将语义版本的 shell 变量转换为移位整数?
问题描述
给定一个值为语义版本的 shell 变量,如何创建另一个值为(tuple 1 × 1000000) + (tuple 2 × 1000) + (tuple 3)的 shell 变量?
例如
$ FOO=1.2.3
$ BAR=#shell magic that, given ${FOO} returns `1002003`
# Shell-native string-manipulation? sed? ...?
我不清楚 POSIX 合规性与特定于 shell 的语法如何在这里发挥作用,但我认为首选不是特定于 bash 的解决方案。
更新:澄清一下:这并不像.
用零替换“”那么简单,这是我最初的想法。
例如,期望的输出1.12.30
is 1012030
, not 100120030
,这是.
-replacement 方法可能提供的。
如果答案可以是单行变量赋值,则奖励。
解决方案
perl 单行:
echo $FOO | perl -pne 's/\.(\d+)/sprintf "%03d", $1/eg'
这个怎么运作:
perl -pne
使用提供的程序执行REPL- 该程序包含替换功能
s///
- 搜索字符串是
\.(\d+)
匹配以点开头并以数字结尾的字符串并捕获这些数字的正则表达式 - 函数的
e
修饰符s///
将替换的右侧计算s///
为表达式。由于我们捕获了数字,它们将被转换为 int 并使用sprintf格式化为前导零 g
修饰符替换输入字符串中正则表达式的所有实例
- 搜索字符串是
推荐阅读
- powershell - $Var.ToUpper() 抛出“您不能在空值表达式上调用方法。”
- javascript - 我怎么知道它的价值是什么会在按键上吗?
- nodatime - 选择合适的 Noda 时间结构
- java - Kotlin - 实例无法通过 myInstance::class.annotations 检索它的类注释,但可以使用 javaClass.annotations
- python - 我想将我的 python 代码转换为 windows 主机的 powershell
- r - 提取某些字符串以在 R 中按 ID 连接
- java - 具有 Spring 数据 MongoDb 聚合的嵌套类对象返回空字段
- python - Buildozer 在部署期间显示错误
- reactjs - 在 react-router-dom 更改后传单地图出现空白
- python - 如何获取文件中所有文本的字符串?