bash命令(sed)删除XML节点

问题描述 投票:0回答:2

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

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

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

然后我删除所有这些Y节点,其值以abc ... string开头

最后,它应该保持如下:

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

我正在搜索并发现,'sed'命令在正则表达式的帮助下做了类似的事情。试图在这个网站和教程上阅读各种其他类似的问题但却不知所措

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

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

谢谢 !

sed
2个回答
0
投票

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

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

要么

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

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

进一步阅读:

© www.soinside.com 2019 - 2024. All rights reserved.