bash命令(sed)删除XML节点

时间:2016-09-07 13:53:50

标签: sed

我尝试创建Bash命令,如果它包含以特定几个字符开头的字符串,则删除XML中的特定节点

例如 如果我的XML是这样的:

  <X>
   <Y> abc... </y>
   <Y> trf... </y>
   <Y> abc... </y>
  </X>

然后我删除所有具有以abc ... string

开头的值的Y节点

最后,它应该保持如下:

<X>
   <Y> trf... </y>
 </X>

我正在寻找并发现,&#39; sed&#39; commmand在正则表达式的帮助下做了类似的事情。试图阅读本网站上的各种其他类似问题和教程但却不知所措

我知道,要求进行各种勺子喂食,但请提示我是否可以轻松完成这项工作,因为在我开始相关活动之前,我已经有几个小时可用了!

还有关于&#39; sed&#39;的简单教程。因为找到学习和理解它有点复杂..无论我到现在为止在网上发现了什么。

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您打开使用awk,则可以使用以下命令打印那些不包含abc的行。

 awk '!/<Y> abc/' xml
 <X>
   <Y> trf... </y>
  </X>

awk ' /<X>/,/<\/X>/  {if($0 !~ "<Y> abc") print $0}' xml

答案 1 :(得分:0)

$ cat ip.txt 
  <X>
   <Y> abc... </y>
   <Y> trf... </y>
   <Y> abc... </y>
  </X>

$ sed '/<Y> abc/d' ip.txt 
  <X>
   <Y> trf... </y>
  </X>
  • /<Y> abc/匹配包含模式<Y> abc
  • 的行
  • d命令删除匹配的行
  • 也可以使用grep -v '<Y> abc' ip.txt

进一步阅读: