sed 的删除行的用法求解!

sed 的删除行的用法求解!

cat ok_Process_dir.txt 
/usr/sbin/zabbix_agentd
/usr/local/bin/node
/usr/local/bin/python3.8
/usr/sbin/zabbix_server_mysql
/usr/share/elasticsearch/jdk/bin/java
/usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller
/proc/9450/exe


cat dai_cha.txt 
/usr/sbin/zabbix_agentd_1
/usr/local/bin/node
/usr/local/bin/python3.8
/usr/sbin/zabbix_server_mysql2
/usr/share/elasticsearch_3/jdk/bin/java
/usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller
/proc/9450/exe

想从ok_Process_dir.txt 读取行,删除 dai_cha.txt 中

/usr/local/bin/node
/usr/local/bin/python3.8
/usr/share/elasticsearch/jdk/bin/java
/usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller
/proc/9450/exe
的这几行,保留 dai_cha.txt的下面几行,该怎么做
/usr/sbin/zabbix_agentd_1
/usr/sbin/zabbix_server_mysql2
/usr/share/elasticsearch_3/jdk/bin/java

尝试过以下脚本未能成功,只能用脚本解决,求指导,谢谢
cat ok_Process_dir.txt|while read hash
 do
   sed -i '#'$hash'#d' dai_cha.txt

注意ok_Process_dir.txt 的文件路径可能有N个/

既然用shell写代码,那就可以灵活些,不限制再sed的话。

img

您可以尝试使用以下脚本来实现删除行的目的:

# 读取ok_Process_dir.txt中的每一行
while read line
do
    # 在dai_cha.txt中搜索匹配行,并使用sed删除这些行
    sed -i "/$line/d" dai_cha.txt
done < ok_Process_dir.txt

在这个脚本中,我们首先使用while循环读取ok_Process_dir.txt中的每一行。然后,我们在dai_cha.txt中搜索匹配行,并使用sed命令删除这些行。

希望我的回答能帮到您。

shell中单引号和双引号的含义不一样,如果要输出变量的值,必须使用双引号,所以,shell文件中的 sed -i '#'$hash'#d' dai_cha.txt 有问题,应该改写成 sed -i "/${hash}/d" dai_cha.txt 。我也不是很清楚为什么用井号不行,但是用斜杠我试过是可以删除的变量所在的行

这个实例讲解的是使用正则表达式删除行,你看看是否可行,链接:http://www.readke.com/c/542419.html

sed 删除某一行_sed详解 非常详细
如有帮助,望采纳
https://blog.csdn.net/weixin_29596051/article/details/112180643

#!/bin/bash
while read line
do
    line=${line//\//\\\/}
    sed -i "" "/^$line$/d" dai_cha.txt
done < ok_Process_dir.txt