如何获得yum更新列表

问题描述 投票:1回答:4

好的,我一直有这个问题。我想通过使用yum从Linux系统(RHEL或Fedora)通过bash脚本在文件中列出的可用更新,但我总是要处理创建的Header信息,如下所示:

    Loaded plugins: XXXX-repo  XXXX-updates
                  : WWWWWW-repo  something-updates  QQQQQ-updates
     Updated packages
     package1.i686         1:234                  RHEL 6.5 updates
     package2.i686         1:234                  RHEL 6.5 updates
     package3.i686         1-234                  RHEL 6.5 updates
     package4.noarch       1.234                  RHEL 6.5 updates

我想要的只是package1,package2等的列表,这看起来很简单,但并不是因为我不能只关注“更新”或“:”。我错误地看着这个吗?为什么我不想捕获脚本中发现的更新?我应该更新并检查已更新的内容吗?思考?

PS>我不能使用--noplugins选项。

编辑:到目前为止,我已经想出了这个,

     sudo yum check-update | grep "\." | awk '(NR >=1) {print $1;}' | grep '^[[:alpha:]]'

基本上抓住第一行中带有句点的行,并确保它首先包含字母。也许过度完成但似乎有效。

bash yum
4个回答
4
投票

仅打印以下(但不包括)“更新的包”的行

yum check-update | awk 'p; /Updated packages/ {p=1}'

注意,在我的Fedora系统上,一个空行将“标题”与可更新包列表分开,所以我会使用awk 'p;/^$/{p=1}'


3
投票

如果使用此命令将上面的输出传递给awk:

| awk '(NR >=4) {print $1;}'

您将获得以下输出

package1.i686
package2.i686
package3.i686
package4.noarch

(NR> = 4)告诉awk忽略前三行。 {print $ 1;}告诉awk打印每行的第一个单词。

您可以阅读here以获取有关在每行上的某些字符后切出的更多信息。然后,你可以使用sed,如果删除后的所有内容。很重要

| awk '(NR >=4) {print $1;}' | sed s/\.[^\.]*$// 

给出以下输出

package1
package2
package3
package4

然后用逗号将它传递给replace the linebreaks的另一个sed命令。

| awk '(NR >=4) {print $1;}' | sed s/\.[^\.]*$// | sed ':a;N;$!ba;s/\n/,/g'

产生以下输出

package1,package2,package3,package4

1
投票

试试这个:

yum check-update | awk '{if($5 ~ /updates/){print $1}}' | tr '\n' ','

如果输入包含第五列的“更新”,则打印第一列并创建csv列表。


1
投票

更灵活的解决方案

下面的解决方案不假设标题中的特定行数(例如,在CentOS中我有更多的标题行)。 它也不认为你只对存储库updates感兴趣。

yum check-update | awk '/\S+\s+[0-9]\S+\s+\S+/ {print $1 }' > updates

Example

对于以下yum check-update输出

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                    |  31 kB  00:00:00  
 * base: asi-fs-m.net
Excluding mirror: mirror.de.leaseweb.net
Excluding mirror: mirror.fra10.de.leaseweb.net
base                                    | 3.6 kB  00:00:00  
cwp                                     | 2.9 kB  00:00:00  
extras                                  | 3.4 kB  00:00:00  
mariadb                                 | 2.9 kB  00:00:00  
remi-safe                               | 3.0 kB  00:00:00  
updates                                 | 3.4 kB  00:00:00  
remi-safe/primary_db                    | 1.4 MB  00:00:00  

openvpn.x86_64          2.4.7-1.el7              epel  
polkit.x86_64           0.112-18.el7_6.1         updates  
pure-ftpd.x86_64        1.0.47-2.el7             epel  
remi-release.noarch     7.6-2.el7.remi           remi-safe

你可以得到

openvpn.x86_64
polkit.x86_64
pure-ftpd.x86_64
remi-release.noarch

Explanation

该解决方案假设相关线具有该模式 <package name><spaces><version number><spaces><repo name>

如果要输出特定存储库,请使用该模式 /\S+\s+[0-9]\S+\s+repo_name/

PS:

如果此解决方案在您的系统中不起作用,请在评论中告诉我

© www.soinside.com 2019 - 2024. All rights reserved.