Sed

dpkg-divert 和 sed 上的這些選項與 Nvidia 軟體包轉移有關嗎?

  • May 12, 2020

我最近不得不使用這個命令,因為由於 nvidia 包轉移而出現了一些錯誤,但我不完全知道它是如何工作的:

LC_MESSAGES=C dpkg-divert --list '*nvidia-340*' | sed -nre 's/^diversion of (.*) to .*/\1/p' | xargs -rd'\n' -n1 -- sudo dpkg-divert --remove
sudo apt --fix-broken install

我閱讀了LC_MESSAGESand sed,並且我知道管道運算符是如何工作的,但我無法弄清楚這個命令是如何與這些特定選項一起工作的。

LC_MESSAGES=C dpkg-divert --list '*nvidia-340*'

列出與 glob 模式匹配的所有轉移*nvidia-340*,用英文表示,因此輸出的形式為“轉移 … 到 … 由 …”。

sed -nre 's/^diversion of (.*) to .*/\1/p'

提取“diversion of”和“to”之間的文本,即被轉移文件的名稱。-nre相當於-n -r -e; -n禁用自動模式空間輸出,因此除非p命令請求,否則不會輸出任何內容(請參閱命令末尾sed);-r啟用擴展正則表達式;並-e介紹我們要執行的腳本。在正則表達式中,^diversion of匹配行首的“轉移”(包括空格);(.*)匹配任意數量的字元,並創建一個匹配組;to .*匹配“到”(包括前導和尾隨空格)後跟任何字元。這用於在s命令中僅將完整文本替換\1為匹配組的內容 (“轉移”和“到”之間的文本)。如果命令匹配,則最後p列印模式空間。s

xargs -rd'\n' -n1 -- sudo dpkg-divert --remove

sudo dpkg-divert --remove上一步輸出的每個文件上執行,刪除相應的轉移。

sudo apt --fix-broken install

嘗試修復任何損壞的依賴項。

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