用于对 debian 版本号进行排序的 shell 脚本 (line_5.4.3-2)
我有一个文本文件,其中的条目表示构建标签,其版本和构建号的格式与 debian 包的格式相同,如下所示:
nimbox-apexer_1.0.0-12
nimbox-apexer_1.1.0-2
nimbox-apexer_1.1.0-1
nimbox-apexer_1.0.0-13
使用 shell 脚本,我需要按“版本构建”对上面的列表进行排序并获取最后一行,其中上面的例子是nimbox-apexer_1.1.0-2
。
I have a text file with entries representing build tags with version and build number in the same format as debian packages like this:
nimbox-apexer_1.0.0-12
nimbox-apexer_1.1.0-2
nimbox-apexer_1.1.0-1
nimbox-apexer_1.0.0-13
Using a shell script I need to sort the above list by 'version-build' and get the last line, which in the above example is nimbox-apexer_1.1.0-2
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
获取最新版本:
现在,将其捕获到变量中:
Get the latest build with:
Now, to catch it into a variable:
2n,3n 是该字段中被认为相关的字符数。如果您使用非常大的版本号,请增加它们......
The 2n,3n are the number of characters considered relevant in that field. Increase them if you use really big version numbers...
对于 GNU
sort
:GNU
tail
不喜欢tail -1
。With GNU
sort
:GNU
tail
doesn't liketail -1
.我一直无法找到一种简单的方法来做到这一点。我一直在查看用于对 ip 地址进行排序的代码,这与我的问题类似,并试图将我的情况更改为该问题。这是我想出的。请告诉我有一个更简单更好的方法!
因此,从这些数据开始:
第一个
sed
将我的问题转换为排序 IP 问题,保持原始行在最后反转更改:sort
使用以下命令对行进行排序 :前四个数字在我的例子中代表 mayor.minor.release.build最后一个 sed 消除了用于排序的数据
最后 tail 得到了我需要的最后一行。
I haven't been able to find a simple way to do this. I've been looking at code to sort ip address, which is similar to my problem, and trying to change my situation to that one. This what I have come up with. Please tell me there is a simpler better way !!!
So starting with this data:
The first
sed
converts my problem into a sorting IPs problem keeping the original line to reverse the change at the end:The
sort
orders the line using the first four numbers which in my case represent mayor.minor.release.buildThe last
sed
eliminates the data used to sortFinally
tail
gets the last line which is the one I need.