Sed
dpkg-divert 和 sed 上的這些選項與 Nvidia 軟體包轉移有關嗎?
我最近不得不使用這個命令,因為由於 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_MESSAGES
andsed
,並且我知道管道運算符是如何工作的,但我無法弄清楚這個命令是如何與這些特定選項一起工作的。
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
嘗試修復任何損壞的依賴項。