与字符串比较后删除 .txt 文件中的一行?

与字符串比较后删除 .txt 文件中的一行?

在 CentOS 6.9 机器上工作,我对 bash 脚本有点生疏了。在详细介绍我想要做的事情之前,这是迄今为止我的代码供参考:

#!/bin/bash

package_name="<>"
yum list all > all_packages.txt
len=`expr length "$package_name"`
string=$((len-1))

while IFS= read -r line || "$line"; do
if [[${line:0:$string = $package_name}]]
then <>

我的最终目标是让用户定义要卸载的包,将当前安装的包保存到文本文件,比较该文件中的行以查看哪些行对应于指定的包,将其保存为新的文本文件,然后让“yum remove”命令循环访问该文本文件以删除整个包。

我目前的做法是获取用户想要删除的包,获取相应字符串的长度,然后将每行的前 X 个字符与包本身进行比较 - 如果它们不匹配,我将删除该行并继续下一行。

我现阶段的问题是,我不知道如何删除与指定包不匹配的行。从网上看到的情况来看,可以使用“sed”或“grep”来完成,但我还没有超越这一点。

预先感谢您的所有帮助!我深深地感激!

答案1

当心XY问题

您想要删除仅作为依赖项安装的软件包,这yum可以做到。如果 eclipse 将其他软件包作为依赖项安装,但这些软件包的名称中不包含“eclipse”,该怎么办?字符串匹配对此无济于事。

man yumyum autoremove将删除所有不是由用户手动安装且不再需要的软件包。yum autoremove mypackage将仅删除给定的包及其不再需要的依赖项。

要在使用时自动删除yum remove,请将其添加"clean_requirements_on_remove=1"到您的/etc/yum.conf.

相关内容