我使用的是 fedora 22 和 dnf-1.1.2-4.fc22.noarch
作为一个用例场景:我发现 strace 包没有安装。我想弄清楚这个软件包是否属于任何其他组,以安装我可能也需要完成类似任务的软件。
我发现了这种蛮力方式(grepping 3个空格,因为组名以此缩进开头):
dnf grouplist | grep ' ' | while read line; do dnf groupinfo "$line"; done
然后将此输出重定向到文件,搜索包名称,并在那里找到组名称。
答案1
答案2
这是一个似乎在我的 fedora 21 中工作的示例,但 dnf 仍在变化,所以尝试一下看看:
$ pkg=fvwm
$ dnf groupinfo '*' | sed -n '/Group:/h;/'"$pkg"'/{x;p;x;p}'
Group: Window Managers
fvwm
保存sed
(h) 每个组标题,然后当包匹配时交换保存和模式 (x),打印标题 (p),交换回来并打印包。
答案3
另一种使用方法awk
:
包裹strace
pkg="strace"; dnf groupinfo '*' | awk -F": " '/^Group/ {group=$2} /'"$pkg"'/ {print group}'
输出显示:
Security Lab
C Development Tools and Libraries
包裹fvwm
pkg="fvwm"; dnf groupinfo '*' | awk -F": " '/^Group/ {group=$2} /'"$pkg"'/ {print group}'
输出显示:
Window Managers
答案4
作为替代方案,我们可以列出所有组及其包
# save the result to /tmp/all-group-packages
dnf group list | sed -n 's/ //p' | sed -E "s/(.*)/'\0'/" | xargs dnf group info >/tmp/all-group-packages