如何修剪 dpkg 升级包列表

如何修剪 dpkg 升级包列表

最新升级破坏了我的系统,我正在尝试恢复上次升级。我用实时 USB 打开了我的计算机,并切换到安装了操作系统的分区。我使用

cat /var/log/dpkg.log | grep upgrade >>upgradeddpkg

它列出了如下软件包

2014-03-14 15:31:45 upgrade libprocps0:i386 1:3.3.3-2ubuntu5.3 1:3.3.3-3
2014-03-14 15:31:52 upgrade libreadline-dev:i386 6.2-9ubuntu1 6.2+dfsg-0.1
2014-03-14 15:31:53 upgrade libreadline6-dev:i386 6.2-9ubuntu1 6.2+dfsg-0.1
2014-03-14 15:31:55 upgrade readline-common:all 6.2-9ubuntu1 6.2+dfsg-0.1
2014-03-14 15:32:25 upgrade libreadline6:i386 6.2-9ubuntu1 6.2+dfsg-0.1
2014-03-14 15:32:33 upgrade libudev0:i386 175-0ubuntu19 175-7.2
2014-03-14 15:32:40 upgrade libdevmapper-dev:i386 2:1.02.74-6ubuntu4 2:1.02.74-8
2014-03-14 15:32:42 upgrade libdevmapper-event1.02.1:i386 2:1.02.74-6ubuntu4 2:1.02.74-8
2014-03-14 15:32:43 upgrade libdevmapper1.02.1:i386 2:1.02.74-6ubuntu4 2:1.02.74-8
2014-03-14 15:32:44 upgrade dmsetup:i386 2:1.02.74-6ubuntu4 2:1.02.74-8

我如何才能通过 grep、awk 或任何工具获取包的名称?

答案1

尝试以下命令,

awk ' { print $4 } ' upgradeddpkg > upgrade.txt

如果你不想要冒号,:那么运行,

awk -F ':' ' { print $1 } ' upgrade.txt > upgrade1.txt

解释:

awk ' { print $4 } ' upgradeddpkg > upgrade.txt

在此,awk 从中获取输入 upgradeddpkg并仅打印 $4(列号 4)。该输出被重定向到upgrade.txt文件。因此 upgrade.txt 文件仅包含带有冒号的包名称。要删除冒号及其后续部分(后面),您必须运行第二条命令。默认情况下,awk 将空格视为分隔符。

awk -F ':' ' { print $1 } ' upgrade.txt > upgrade1.txt

分隔符冒号是手动设置的,awk 将冒号视为分隔符而不是空格。现在 awk 从 upgrade.txt 获取输入 (stdin) 并打印 (stdout) 列 1(冒号之前的部分)。最后,标准输出被重定向到upgrade1.txt。现在它只包含包名称。

答案2

使用 grep 进行初始搜索时存在问题,因为它包括诸如 之类的内容ubuntu-release-upgrader-core:all。我会使用单个awk来匹配并选择正确的字段。

awk '$3=="upgrade" { print $4 }' /var/log/dpkg.log

默认情况下,awk 根据空格拆分每行。第三个字段是操作(因此我们检查它是否等于“升级”),第四个字段是包名称。

一些软件包会进行多次升级,因此你可以使用以下方法消除重复的干扰:

awk '$3=="upgrade" { print $4 }' /var/log/dpkg.log | sort -u

我现在已经看到了 Avinash 的回答......我会稍微谨慎地剪掉架构......根据你正在做的事情,它们可能与包名称一样相关......但如果你确实想把它们剪掉,我可能会在同一个awk语句中这样做:

awk '$3=="upgrade" { split($4, a, ":"); print a[1] }' /var/log/dpkg.log | sort -u

或者,您可以为 设定多个字段分隔符awk,以便将其拆分任何一个在空格或冒号上:

awk -F'[ :]' '$5=="upgrade" { print $6 }' /var/log/dpkg.log

相关内容