Skip to main content
 首页 » 编程设计

linux之在 Linux 服务器上搜索最新版本的软件

2023年11月22日86lexus

好吧,我发现很难理解这个问题。有人可以帮我解决逻辑问题吗?

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

所以我 rpm -qa | grep 名称 |排序-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”,其余变化直到“-”

我希望输出的文件是这样的:

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

所有软件依此类推。

请您参考如下方法:

假设版本已排序并且软件之间出现换行符(就像在您的示例中一样),您可以使用 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:~$