加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在bash中对语义版本进行排序?

发布时间:2020-12-15 21:49:20 所属栏目:安全 来源:网络整理
导读:我想对语义版本进行排序( semver.org) v1.4.0v1.4.0-alphav1.4.0-alpha1v1.4.0-patchv1.4.0-patch9v1.4.0-patch10v1.4.0-patch2v1.5.0v1.5.0-alphav1.5.0-alpha1v1.5.0-alpha2v1.5.0-patchv1.5.0-patch1 以适当的方式.例如,作为 version_compare() does in P
我想对语义版本进行排序( semver.org)

v1.4.0
v1.4.0-alpha
v1.4.0-alpha1
v1.4.0-patch
v1.4.0-patch9
v1.4.0-patch10
v1.4.0-patch2
v1.5.0
v1.5.0-alpha
v1.5.0-alpha1
v1.5.0-alpha2
v1.5.0-patch
v1.5.0-patch1

以适当的方式.例如,作为version_compare() does in PHP(它不直接,但可以用于此).

当然,排序-V | –version-sort在这里不起作用.

$echo 1.0 1.0-alpha | tr ' ' "n" | sort --version-sort
1.0
1.0-alpha

有一些存在的方法吗?

附:

在一般意义上,它应遵循此模式:

1.0.0-alpha 
  < 1.0.0-alpha.1 
    < 1.0.0-alpha.beta 
      < 1.0.0-beta
        < 1.0.0-beta.2
          < 1.0.0-beta.11
           < 1.0.0-rc.1 < 1.0.0
             < 1.0.0-patch < 1.0.0-patch.1.

P.P.S.

Semver 2.0不支持补丁,但它是必需的.

解决方法

好吧,我们可以通过在不包含连字符的行的字符串末尾添加一个虚拟字符来欺骗排序-V:

$echo "$versions" | sed '/-/!{s/$/_/}' | sort -V | sed 's/_$//'
v1.4.0-alpha
v1.4.0-alpha1
v1.4.0-patch
v1.4.0-patch2
v1.4.0-patch9
v1.4.0-patch10
v1.4.0
v1.5.0-alpha
v1.5.0-alpha1
v1.5.0-alpha2
v1.5.0-patch
v1.5.0-patch1
v1.5.0

连字符后用词法排序.这就是诀窍.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读