有沒有辦法只從 Debian-experimental 中查看軟體包列表?
我在 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 指南。