首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除重复的包依赖项,按版本排序

删除重复的包依赖项,按版本排序
EN

Stack Overflow用户
提问于 2017-08-18 18:45:06
回答 1查看 185关注 0票数 0

例如,我有一个这样的文件:

代码语言:javascript
复制
"grunt": "0.4.5",
"grunt": "1.0.1"
"grunt": "1.0.1",
"grunt-angular-templates": "0.5.7",
"grunt-cli": "^0.1.13",
"grunt-contrib-clean": "0.6.0",
"grunt-contrib-compress": "0.12.0",
"grunt-contrib-concat": "1.0.1",

现在,我想删除具有重复前缀的行,但保留那些具有更新版本的行。因此,对于以grunt开头的行,我希望保留版本为1.0.1的行,但删除其他版本的行。

这样做有直截了当的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-18 19:49:13

朴素方法的一个实现非常简单:

代码语言:javascript
复制
sort -k1,1 -k2,2Vr file | sort -k1,1 -u

即:按第一个字段(包名)升序排序,按照使用--version-sort (版本号的自然排序)降序的第二个字段(版本)排序。然后在第二次传递(第二次sort调用,带有-u/--unique标志)只需按包名进行比较,并删除所有重复的包(具有相同名称但版本号较小的包,因为在第一次传递之后,更大的版本将出现在顶部)。

示例输入的结果是:

代码语言:javascript
复制
"grunt": "1.0.1",
"grunt-angular-templates": "0.5.7",
"grunt-cli": "^0.1.13",
"grunt-contrib-clean": "0.6.0",
"grunt-contrib-compress": "0.12.0",
"grunt-contrib-concat": "1.0.1",

但是,因为npm (我假设这些是来自package.json的行)使用语义版本控制(语义版本),正确地处理语义排序要比上面的sort方法要复杂得多。

例如,您必须对诸如>=version~version^versionversion1 - version2、偶数range1 || range2、甚至URLGitHub URLE 126标记E 227等版本进行排序。

要处理所有这些(有效的)版本,最好使用专门的工具,例如semver

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45763191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档