如何使用 sed 编辑 /var/log/apt/history.log 以便 apt-get 删除大量已安装的软件包?

如何使用 sed 编辑 /var/log/apt/history.log 以便 apt-get 删除大量已安装的软件包?

运行这两个命令后:

sudo apt-get install ubuntu-desktop
sudo apt-get remove ubuntu-desktop

我是剩余已安装的软件包过多我在 Lubuntu 安装中不需要/不想要它。我只是想看看 Unity 在 Lubuntu 下的表现如何。

我发现我可以通过查看我的/var/log/apt/history.log

我想简单地将此列表剪切并粘贴到sudo apt-get remove命令中,但首先我需要删除 apt-get 无法理解的部分。基本上,括号内的所有内容(包括括号本身)都需要删除。此外,每个条目后面的逗号和空格也需要删除。

到目前为止,我使用 sed 最接近的结果是:

sed -e 's/(.*),[[:space:]]//g' apt-log.txt

这是不对的,因为它删除了几乎所有内容。我推测这是因为它匹配了最后一个“)”,并删除了它之前的所有内容,直到“(”。以下是链接节目列表来自我尝试编辑的日志。

可以想象,我宁愿不手动编辑该列表。我对正则表达式几乎一无所知,正在努力学习,但一些具体的指导会大有帮助。或者也许有更好的方法可以解决这个问题?

答案1

你的正则表达式的问题在于它的贪婪*+量词会尽可能地匹配)。不幸的是,无法判断sed是否使用非贪婪正则表达式。您必须使用Perl来实现这一点,尽管sed确实存在一些不太好的解决方法。

所以尝试以下Perl一行

perl -pe 's/\(.*?\)(, )?//g' /var/log/apt-history.log

这样就可以按照您的意愿操作文本了。您会发现 PCRE(Perl 正则表达式)与sed使用的 POSIX / GNU BRE 和 ERE 非常相似。

答案2

您最好运行apt-get autoremove- 以消除损坏的依赖关系 - 而不是编辑文件并手动传递它们。

相关内容