我有以下 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
删除它们
我对 find
没问题和 exec
但失败了 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
行分隔符的 hacky 解决方案。 (如此处建议:https://unix.stackexchange.com/questions/26284/how-can-i-use-sed-to-replace-a-multi-line-string)
请注意,我假设您要删除整个过滤器 block 。已使用上面的输入字符串进行测试,但可能需要针对多个匹配项进行调整。
cat your.xml | tr '\n' '\r' | sed -e 's/<filter>.*FooServletFilter.*<\/filter>//' | tr '\r' '\n' > your_new.xml
关于regex - 查找和删除 xml 文件中的特定标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46429483/