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的话。
您可以尝试使用以下脚本来实现删除行的目的:
# 读取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