用于对 debian 版本号进行排序的 shell 脚本 (line_5.4.3-2)

发布于 2024-09-17 07:31:12 字数 268 浏览 2 评论 0原文

我有一个文本文件,其中的条目表示构建标签,其版本和构建号的格式与 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

不必在意 2024-09-24 07:31:13

获取最新版本:

cat file.txt | sort -V | tail -n1

现在,将其捕获到变量中:

BUILD=$(cat file.txt | sort -V | tail -n1)

Get the latest build with:

cat file.txt | sort -V | tail -n1

Now, to catch it into a variable:

BUILD=$(cat file.txt | sort -V | tail -n1)
知足的幸福 2024-09-24 07:31:13
sort -n -t "_" -k2.3 file | tail -1
sort -n -t "_" -k2.3 file | tail -1
一生独一 2024-09-24 07:31:13
cat file.txt | cut -d_ -f 2 | sed "s/-/./g" | sort -n -t . -k 1,2n -k 2,2n -k 3,3n  -k 4,3n

2n,3n 是该字段中被认为相关的字符数。如果您使用非常大的版本号,请增加它们......

cat file.txt | cut -d_ -f 2 | sed "s/-/./g" | sort -n -t . -k 1,2n -k 2,2n -k 3,3n  -k 4,3n

The 2n,3n are the number of characters considered relevant in that field. Increase them if you use really big version numbers...

絕版丫頭 2024-09-24 07:31:13

对于 GNU sort

sort --version-sort file | tail -n -1

GNU tail 不喜欢 tail -1

With GNU sort:

sort --version-sort file | tail -n -1

GNU tail doesn't like tail -1.

蓝天 2024-09-24 07:31:13

我一直无法找到一种简单的方法来做到这一点。我一直在查看用于对 ip 地址进行排序的代码,这与我的问题类似,并试图将我的情况更改为该问题。这是我想出的。请告诉我有一个更简单更好的方法!

sed 's/^[^0-9]*\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)-\([0-9]*\)/\1.\2.\3.\4 &/' list.txt | \
  sort -t . -n -k 1,1 -k 2,2 -k 3,3 -k 4,4 | \
  sed 's/^[^ ]* \(.*\)/\1/' | \
  tail -n 1

因此,从这些数据开始:

nimbox-apexer_11.9.0-2
nimbox-apexer_1.10.0-9
nimbox-apexer_1.9.0-1
nimbox-apexer_1.0.0-12
nimbox-apexer_1.1.0-2
nimbox-apexer_1.1.0-1
nimbox-apexer_1.0.0-13

第一个 sed 将我的问题转换为排序 IP 问题,保持原始行在最后反转更改:

11.9.0.2 nimbox-apexer_11.9.0-2
1.10.0.9 nimbox-apexer_1.10.0-9
1.9.0.1 nimbox-apexer_1.9.0-1
1.0.0.12 nimbox-apexer_1.0.0-12
1.1.0.2 nimbox-apexer_1.1.0-2
1.1.0.1 nimbox-apexer_1.1.0-1
1.0.0.13 nimbox-apexer_1.0.0-13 

sort 使用以下命令对行进行排序 :前四个数字在我的例子中代表 mayor.minor.release.build

1.0.0.12 nimbox-apexer_1.0.0-12
1.0.0.13 nimbox-apexer_1.0.0-13 
1.1.0.1 nimbox-apexer_1.1.0-1
1.1.0.2 nimbox-apexer_1.1.0-2
1.9.0.1 nimbox-apexer_1.9.0-1
1.10.0.9 nimbox-apexer_1.10.0-9
11.9.0.2 nimbox-apexer_11.9.0-2

最后一个 sed 消除了用于排序的数据

nimbox-apexer_1.0.0-12
nimbox-apexer_1.0.0-13 
nimbox-apexer_1.1.0-1
nimbox-apexer_1.1.0-2
nimbox-apexer_1.9.0-1
nimbox-apexer_1.10.0-9
nimbox-apexer_11.9.0-2

最后 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 !!!

sed 's/^[^0-9]*\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)-\([0-9]*\)/\1.\2.\3.\4 &/' list.txt | \
  sort -t . -n -k 1,1 -k 2,2 -k 3,3 -k 4,4 | \
  sed 's/^[^ ]* \(.*\)/\1/' | \
  tail -n 1

So starting with this data:

nimbox-apexer_11.9.0-2
nimbox-apexer_1.10.0-9
nimbox-apexer_1.9.0-1
nimbox-apexer_1.0.0-12
nimbox-apexer_1.1.0-2
nimbox-apexer_1.1.0-1
nimbox-apexer_1.0.0-13

The first sed converts my problem into a sorting IPs problem keeping the original line to reverse the change at the end:

11.9.0.2 nimbox-apexer_11.9.0-2
1.10.0.9 nimbox-apexer_1.10.0-9
1.9.0.1 nimbox-apexer_1.9.0-1
1.0.0.12 nimbox-apexer_1.0.0-12
1.1.0.2 nimbox-apexer_1.1.0-2
1.1.0.1 nimbox-apexer_1.1.0-1
1.0.0.13 nimbox-apexer_1.0.0-13 

The sort orders the line using the first four numbers which in my case represent mayor.minor.release.build

1.0.0.12 nimbox-apexer_1.0.0-12
1.0.0.13 nimbox-apexer_1.0.0-13 
1.1.0.1 nimbox-apexer_1.1.0-1
1.1.0.2 nimbox-apexer_1.1.0-2
1.9.0.1 nimbox-apexer_1.9.0-1
1.10.0.9 nimbox-apexer_1.10.0-9
11.9.0.2 nimbox-apexer_11.9.0-2

The last sed eliminates the data used to sort

nimbox-apexer_1.0.0-12
nimbox-apexer_1.0.0-13 
nimbox-apexer_1.1.0-1
nimbox-apexer_1.1.0-2
nimbox-apexer_1.9.0-1
nimbox-apexer_1.10.0-9
nimbox-apexer_11.9.0-2

Finally tail gets the last line which is the one I need.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文