发现并以XML文件

问题描述:

我有以下XML结构删除特定标签:发现并以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

删除我很好findexecsed失败。

#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

你能帮我解决这个问题吗?

+0

[编辑]你的问题,显示因为输入预期的输出。你的输入看起来像你所需要的只是删除确切的字符串' FooServletFilter filter-name> - 如果不是这种情况,那么提供更真实的样本输入/输出,或者你最终会解决您没有的问题。显示一个难以处理的案例,而不是简单的阳光案例。正确的解决方案不会涉及sed,所以你至少应该用awk标记这个。 –

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 

这是我得到的

gsed '/<filter>/ {:1; {/<\/filter>/!{N; b1;}; h;}; x; /FooServletFilter/!p; d; }' <your file>