我有以下xml结构:

<filter>
 <filter-name>FooServletFilter</filter-name>
 <filter-class>
    com.foo.web.online.util.csrf.FooServletFilter
 </filter-class>
</filter>

<filter-mapping>
  <filter-name>FooServletFilter</filter-name>
  <url-pattern>/bar/foo/*</url-pattern>
</filter-mapping>

嗯,我们遇到了紧急情况,需要拆除正在生产的过滤器。
我想我可以find包含这些过滤器的web.xml文件,并用sed删除它们
我对findexec很满意,但对sed失败了。
#find / -type f -name "web.xml -exec sed -i -e 's/<filter>.*FooServletFilter<\/filter>//g
失败。然后我想在我的本地文件上尝试sed
我尝试了很多事情,比如:
sed -i -e 's/<filter>.*FooServletFilter<\/filter>//g' web.xml
但没有运气。
ps:我有多个xml节点。我需要移除
FooServletFilter
你能帮我解决这个问题吗?

最佳答案

sed命令在处理多行时变得棘手。
这是一个处理\n行分隔符的复杂解决方案。(此处建议:https://unix.stackexchange.com/questions/26284/how-can-i-use-sed-to-replace-a-multi-line-string
请注意,我假设您要删除整个过滤块。使用上面的输入字符串进行测试,但可能需要对多个匹配项进行调整。

cat your.xml | tr '\n' '\r' | sed -e 's/<filter>.*FooServletFilter.*<\/filter>//' | tr '\r' '\n' > your_new.xml

08-27 19:55
查看更多