Debian

有沒有辦法只從 Debian-experimental 中查看軟體包列表?

  • January 29, 2015

我在 Debian testing/Jessie 上,我有 debian-experimental 以及我的 /etc/apt/sources.list。所以我希望以兩種方式列出包:-

一種。列出所有處於實驗階段的包。

我能夠通過以下方式實現:-

$ apt list | grep experimental

它列出了所有處於實驗階段的軟體包。有沒有辦法獲得僅在 debian-experimental 中而不在 debian-unstable/sid 或 testing 中的軟體包列表。(我的 /etc/apt/sources.list 中也有它們。)

如果人們想知道,那麼是的,我執行一個混合系統,儘管大多數來自測試。我確信使用 grep、awk 等會有一種方法,但還沒有找到。我通過搜尋引擎查看但無法找到答案。

您可以通過列出兩組包並確定兩個結果之間的差異來做到這一點:

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 指南

引用自:https://unix.stackexchange.com/questions/181695