在Linux服务器上获取最新版本的软件

时间:2013-12-05 13:26:39

标签: linux bash grep

好的,我发现很难理解这一点。有人能用这个逻辑来帮助我吗?

我有一些安装了各种软件的Linux服务器。我需要知道该软件的最新版本。

所以我rpm -qa | grep name | sort -n

并获得:

name_componentA_patch-9.10.9.1.0.0-3_es3.0
name_componentA_patch-9.10.9.2.0.5-2_es3.0
name_componentA_patch-9.10.9.3.2.1-2_es3.0
name_componentA_patch-9.10.9.4.2.0-1_es3.0
name_componentA_patch-9.10.9.5.0.2-1_es3.0

name_componentB-9.0.2.1.0-1_es3.0_es4.0
name_componentB-9.0.3.0.1-1_es3.0_es4.0
name_componentB-9.0.4.0.0-1_es3.0_es4.0

现在我需要输出各种不同软件的最新版本的文件。 这里的常量是“名称”,其余的更改为“ - ”

我想输出的文件是这样的:

name_componentA_patch-9.10.9.5.0.2-1_es3.0
name_componentB-9.0.4.0.0-1_es3.0_es4.0

依此类推所有软件。

2 个答案:

答案 0 :(得分:1)

假设版本已排序且软件之间出现换行符(就像您的示例中一样),您可以使用sed在换行符之前获取所有行

blackbear@blackbear-notebook:~$ cat test
name_componentA_patch-9.10.9.1.0.0-3_es3.0
name_componentA_patch-9.10.9.2.0.5-2_es3.0
name_componentA_patch-9.10.9.3.2.1-2_es3.0
name_componentA_patch-9.10.9.4.2.0-1_es3.0
name_componentA_patch-9.10.9.5.0.2-1_es3.0

name_componentB-9.0.2.1.0-1_es3.0_es4.0
name_componentB-9.0.3.0.1-1_es3.0_es4.0
name_componentB-9.0.4.0.0-1_es3.0_es4.0

blackbear@blackbear-notebook:~$ sed -n '/^$/{g;1!p;};h' < test
name_componentA_patch-9.10.9.5.0.2-1_es3.0
name_componentB-9.0.4.0.0-1_es3.0_es4.0
blackbear@blackbear-notebook:~$ 

答案 1 :(得分:0)

可能不是您正在寻找的答案,但如果您在一台服务器上有多个版本的东西,我强烈建议您使用“alternatives”命令来管理它们。

如果您正在使用替代方案,那么/ etc / alternatives目录将包含所有链接,而/ var / lib / alternatives将包含有关所管理的不同软件版本的所有信息。