bash - bash 排序字母数字版本号
问题描述
我有一个从我的构建服务器获得的构建编号列表,如下所示:
1.0.0.b1
1.0.0.b10
1.0.0.b11
1.0.0.b12
1.0.0.b13
1.0.0.b14
1.0.0.b15
1.0.0.b16
1.0.0.b17
1.0.0.b18
1.0.0.b19
1.0.0.b2
1.0.0.b20
1.0.0.b21
1.0.0.b22
1.0.0.b3
1.0.0.b4
1.0.0.b5
1.0.0.b6
1.0.0.b7
1.0.0.b8
1.0.0.b9
现在我需要在我期望底部的最高版本号的地方对它进行排序,如下所示:
1.0.0.b1
1.0.0.b2
1.0.0.b3
1.0.0.b4
1.0.0.b5
1.0.0.b6
1.0.0.b7
1.0.0.b8
1.0.0.b9
1.0.0.b10
1.0.0.b11
1.0.0.b12
1.0.0.b13
1.0.0.b14
1.0.0.b15
1.0.0.b16
1.0.0.b17
1.0.0.b18
1.0.0.b19
1.0.0.b20
1.0.0.b21
1.0.0.b22
现在在带有 GNU sort 的 linux 中很容易 - 只需使用 sort -V
但这也必须在我没有任何经验的 macOS 上工作,但通过测试我知道 -V 在那里不起作用。
我试过了
sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n
但那里没有运气。
我想让它按版本/内部版本号排序,例如
1.1.3.b5 高于 1.0.3.b66
我在这里错过了什么?你能帮我么?此外,不幸的是,安装 homebrew coreutils 不是一种选择
谢谢你,亚历克斯兄弟
解决方案
我假设您真正的完整列表不会包含所有b
版本。您需要将字段 4 拆分为两个键;一个用于字母部分,一个用于数字部分。
$: sort -t. -k1n -k2n -k3n -k4.1,4.1 -k4.2n vnums
1.0.0.a5
1.0.0.a10
1.0.0.a13
1.0.0.a19
1.0.0.b1
1.0.0.b6
1.0.0.b8
1.0.0.b9
1.0.0.b12
1.0.0.b14
1.0.0.b17
1.0.0.b20
1.0.0.b21
1.0.0.b22
1.0.0.c3
1.0.0.c7
1.0.0.c15
1.0.0.c16
1.0.0.d2
1.0.0.d4
1.0.0.d11
1.0.0.d18
1.0.3.b66
1.1.3.b5
请注意字段 4 的 alpha 列限制为单个字符。
推荐阅读
- c++ - 在 C++ 中打印没有强制转换的枚举可以吗?
- c++ - 用另一个父类函数覆盖函数
- javascript - React Native:'TypeError:未定义不是对象(评估'response.headers ['set-cookie']')'
- php - 在 PHP 中打印树中可见的级别时出错
- c# - Razor - 如何将 id 附加到单选按钮
- python - 将熊猫 df 转换为 json
- swift - Swift:将字符串日期数组转换为格式化字符串日期
- git - 如何完全删除 Git(Windows)?或重新登录 Git Windows
- c++ - 我无法删除这些向量的元素
- esri - ESRI ArcGIS:平移和缩放以适合标记