dpkg-divert 和 sed 上的这些选项与 Nvidia 软件包转移相关,有什么作用?

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_MESSAGESand 的内容sed,并且知道管道运算符是如何工作的,但我无法弄清楚该命令如何与这些特定选项一起工作。

答案1

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

以英语列出与 glob 模式匹配的所有转移*nvidia-340*,以便输出的形式为“diversion of ... to ... by ...”。

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

提取“diversion of”和“to”之间的文本,IE转移的文件的名称。-nre相当于-n -r -e-n禁用自动模式空间输出,因此除非命令请求p(请参见命令末尾sed),否则不会输出任何内容;-r启用扩展正则表达式;并-e介绍我们要运行的脚本。正则表达式中,^diversion of匹配行首的“diversion of”(包括空格);(.*)匹配任意数量的字符,并创建一个匹配组;to .*匹配“ to ”(包括前导空格和尾随空格)后跟任何字符。这在命令中使用,s仅将完整文本替换为\1匹配组的内容(IE“diversion of”和“to”之间的文本)。如果命令匹配,则最终p打印模式空间。s

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

sudo dpkg-divert --remove对上一步输出的每个文件运行,删除相应的转移。

sudo apt --fix-broken install

尝试修复任何损坏的依赖关系。

相关内容