我正在尝试创建Bash命令,如果它包含以特定的几个字符开头的字符串,则删除XML中的特定节点
对于例如 如果我的XML是这样的:
<X>
<Y> abc... </y>
<Y> trf... </y>
<Y> abc... </y>
</X>
然后我删除所有这些Y节点,其值以abc ... string开头
最后,它应该保持如下:
<X>
<Y> trf... </y>
</X>
我正在搜索并发现,'sed'命令在正则表达式的帮助下做了类似的事情。试图在这个网站和教程上阅读各种其他类似的问题但却不知所措
我知道,要求提供各种勺子喂食,但请建议我是否可以轻松完成这项工作,因为在我开始相关活动之前,我已经有几个小时可用了!
还有一个关于'sed'的简单教程,因为找到学习和理解它有点复杂..无论我到现在为止在网上发现了什么。
谢谢 !
如果您打开使用awk,则可以使用以下命令打印那些不包含abc的行。
awk '!/<Y> abc/' xml
<X>
<Y> trf... </y>
</X>
要么
awk ' /<X>/,/<\/X>/ {if($0 !~ "<Y> abc") print $0}' xml
$ 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
进一步阅读: