xml - 提到开始和结束模式时,sed 正在删除多行

标签 xml linux shell unix sed

我有一个 xml 文件 emp.xml

<?xml>
<employee name="abc">ABC</employee>
<employee name="def">DEF</employee>
<!-- abc@gmail.com
this comment is added
to <employee name="gh">
</employee>
-->

?> 

我想从此文件中删除一些员工详细信息。其他文件 delemp.txt 中提到了要删除的员工详细信息 美国广播公司 高

while read line
do 
i=\"$line\"
echo $i
find . -name "emp.xml" -type f | xargs sed -i -e '/employee name='$i'/,/<\/employee>/d'

done < delemp.txt

我正在阅读 delemp.txt 并获取要删除的员工详细信息并搜索员工姓名 = 和员工结束标记,但此代码不起作用

即使我尝试

sed -i '/employee name=\"abc\"/,/<\/employee>/d' emp.xml

它正在删除前两行,即 name="abc"和 "def"

最佳答案

更正 xml 使其有效

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <employee name="abc">ABC</employee>
  <employee name="def">DEF</employee>
  <!-- abc@gmail.com
this comment is added
to <employee name="gh">
</employee>
-->
</root>

使用和一个合适的 删除 XML 节点的表达式

xmlstarlet ed -L -d '/root/employee[@name="abc"]' file.xml

结果

<?xml version=xmlstarlet ed -L -d '/root/employee[@name="abc"]' file.xml"1.0" encoding="UTF-8"?>
<root>
  <employee name="def">DEF</employee>
  <!-- abc@gmail.com
this comment is added
to <employee name="gh">
</employee>
-->
</root>

最后:

while read name; do
    xmlstarlet ed -L -d "/root/employee[@name='$name']" file.xml
done < names.txt

关于xml - 提到开始和结束模式时,sed 正在删除多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55500658/

相关文章:

linux - Netstat 阻止了我的减速?

c - 在哪里可以找到 eventfd_write 文档?

linux - 等到第一个 .jar 文件完成后,再在 for 循环中执行第二个 .jar 文件

linux - 如何使用 Linux shell 脚本在文件中找到此模式?

python - 如何获取qt中特定xml节点的所有属性

objective-c - iPhone SDK : verify XML before processing it?

regex - Unix 模式日期时间匹配

java - REST是API,还是: REST vs Java Interface?

java - 无法为 intellij 解析符号 @integer/google_play_services_version

linux - 在 Unix 中合并来自多个文件的列