我尝试创建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;的简单教程。因为找到学习和理解它有点复杂..无论我到现在为止在网上发现了什么。
谢谢!
答案 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
进一步阅读: