我正在进行 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
-F
grep
-x
-v
grep
这些<()
结构使用进程替换将括号内包含的命令的标准输出提供给管道,然后该管道可以用作另一个命令的输入;看高级 bash 指南了解详情。