Bash 如何仅删除模式的第一组?
我已经尝试了很多方法来解决这个问题,但是我已经没有主意了。希望有人能指出我做错了什么 以下是我的意见:Bash 如何仅删除模式的第一组?,bash,unix,sed,Bash,Unix,Sed,我已经尝试了很多方法来解决这个问题,但是我已经没有主意了。希望有人能指出我做错了什么 以下是我的意见: <Root> <A>Keep</A> <B>Keep</B> <B>Remove</B> <B>Keep</B> <C>Keep</C> </Root> 保持 保持 去除 保持 保持 正如你们现在已经知道的
<Root>
<A>Keep</A>
<B>Keep</B>
<B>Remove</B>
<B>Keep</B>
<C>Keep</C>
</Root>
保持
保持
去除
保持
保持
正如你们现在已经知道的,我只是想删除第4行:
保持
保持
保持
保持
以下是我到目前为止所做的,但它并没有完全按照预期工作:
sed -e '3,${g;s/<B>.*<\/B>//p}' t1
sed-e'3,${g;s/*//p}'t1
我试着加入我发现的团队逻辑的一部分,但它不起作用,因为sed似乎没有直接的方法让它变得贪婪
有什么想法吗
希望有人能指出我做错了什么
正确的方法是使用XML/HTML解析器,如xmlstarlet
或xmllint
:
xmlstarlet ed -O -d "//Root/*[3]" input.xml
-编辑模式ed
-省略XML声明-O
()
-删除操作-d
-选择父节点的第三个子节点的xpath表达式“//Root/*[3]”
Root
输出:
<Root>
<A>Keep</A>
<B>Keep</B>
<B>Keep</B>
<C>Keep</C>
</Root>
保持
保持
保持
保持
1。在对事物的传统理解中,sed是贪婪的。2.为什么不干脆sed'/Remove/d't1
?3.使用3,$
似乎是个骗局:如果是这样,那么为什么不使用sed-n'4t1
?4.如果您注册ex/s/../
甚至没有提到删除
,那么在删除
行之后可以有一行
吗?或者你没有真正告诉我们关于你的问题的所有重要信息;-)祝你好运
<Root>
<A>Keep</A>
<B>Keep</B>
<B>Keep</B>
<C>Keep</C>
</Root>