有没有办法仅从 Debian 实验中查看软件包列表?

有没有办法仅从 Debian 实验中查看软件包列表?

我正在进行 Debian 测试/Jessie,并且在我的 /etc/apt/sources.list 中也有 debian-experimental。所以我希望以两种方式列出软件包:-

A。列出所有处于实验阶段的软件包。

我能够通过以下方式实现这一目标:-

$ apt list | grep experimental

其中列出了所有处于实验阶段的软件包。有没有办法获得仅在 debian-experimental 中而不是在 debian-unstable/sid 或测试中的软件包列表。 (我的 /etc/apt/sources.list 中也有它们。)

如果人们想知道,那么是的,我运行一个混合系统,尽管大多数来自测试。我确信使用 grep、awk 等。会有一种方法,但还没有找到。我通过搜索引擎查看但无法找到答案。

答案1

您可以通过列出两组包并确定两个结果之间的差异来完成此操作:

grep -Fxv -f <(apt list | grep unstable | cut -d/ -f1) <(apt list | grep experimental | cut -d/ -f1)

这会产生“实验减去不稳定”,并且可以通过改变unstable和/或来计算任何差异experimental。严格来说,它不仅仅与套房相匹配;它还与套房相匹配。以下变体通过仅在/inapt list的输出之后匹配来完全匹配:

grep -Fxv -f <(apt list | egrep /.\*unstable | cut -d/ -f1) <(apt list | grep /.\*experimental | cut -d/ -f1)

(否则,名称中带有“experimental”的软件包会在不应该出现的时候出现,例如在比较测试和实验时,trafficserver-experimental-plugins会列出,即使它只存在于不稳定版本中。)

此外,apt list默认情况下仅列出候选包,因此要获得正确的结果,特别是在比较测试和不稳定时,您需要执行以下操作:

grep -Fxv -f <(apt list --all-versions | egrep /.\*unstable | cut -d/ -f1) <(apt list --all-versions | grep /.\*experimental | cut -d/ -f1)

两者都从的输出cut中提取包名称。第一组软件包(来自不稳定版)作为使用该选项apt的模式列表给出。告诉将模式视为纯文本字符串而不是正则表达式;告诉它完全匹配每个模式;并告诉它列出与给定模式不匹配的行。因此,获取实验中的所有包,仅保留那些不在不稳定包列表中的包,并输出结果。grep-f-Fgrep-x-vgrep

这些<()结构使用进程替换将括号内包含的命令的标准输出提供给管道,然后该管道可以用作另一个命令的输入;看高级 bash 指南了解详情。

相关内容