我想检查更新是否可用,如果有,请在安装更新之前执行一些步骤。我运行
yum check-updates
查看可用于已安装软件包的更新列表,但我想 grep
并获得一个计数,我可以将其用于 bash
脚本中的某些逻辑。因此,理想情况下,我希望 grep
输出 check-updates
并在没有更新时返回 0,或者如果有五个更新可用,那么我希望 grep
返回 5。
如何 grep 来返回计数?
我喜欢更简单的方法。
“yum -q”减少 yum 的输出,因此它只显示软件包列表。将此与“wc -l”结合起来计算输出的行数。
因此,为了获取需要更新的软件包的数量,我将运行
sudo yum -q 检查更新 |厕所-l
你知道
grep -c
吗?我刚刚创建了一些无意义的文件,给出了以下结果:
Prompt> grep "AA" test.txt
1A01 TCCTTGAAAG
TCAACAAGAA
TCGCAAA
TTTAAAGTCGT
GGCGGAATCAATAC
GATGGAATATGCGCC
如果我使用
grep -c
,这就是结果:
Prompt> grep -c "AA" test.txt
6
如果这不能完全回答您的问题,请编辑您的问题并添加更多信息,以显示您正在寻找的内容。
另外,请注意,在每个 UNIX 命令后面添加
| wc -l
会读取该命令的结果数量。
awk 和 grep 的组合给出了已安装软件包的可用更新计数:
yum check-updates | awk 'p;/^$/{p=1}' | grep -c "\."
这是基于如何获取 yum 更新列表
中的信息用于
quiet的
-q
很棒,但您可能还想 grep
out 任何空行以及 trailing 已加载插件消息。这对于准确计数非常有效:
yum check-update -q|egrep -v "Loaded plugins: langpacks, product-id, subscription-manager|^$"|wc -l
我遇到了同样的问题,需要一个同时适用于 CloudLinux 和 CentOS 的解决方案。
cut
命令比 awk
更能仅获取包名称。它还带来了一些空行,我使用 grep -v
将其删除。这是对我有用的解决方案:
列出软件包:
yum check-update -q | cut -d " " -f 1 | grep -v -E "^$"
要计算它们,只需在末尾添加“
| wc -l
”即可:
yum check-update -q | cut -d " " -f 1 | grep -v -E "^$" | wc -l
要获取以逗号分隔的列表:
yum check-update -q | cut -d " " -f 1 | grep -v -E "^$" | sed ':a;N;$!ba;s/\n/,\ /g'