regex - 查找和删除 xml 文件中的特定标签

标签 regex linux sed grep find

我有以下 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/

相关文章:

linux - 如何使用 read 系统调用以交互方式获取密码

sed 多行命令不起作用

javascript - 带有特殊字符 (.) 的正则表达式字边界 javascript

PHP、Regex 仅在两个保留字符之间替换用户输入中的换行符

linux - 如何自动分配剩余的空闲空间给分区?

linux - LNMP 服务器上的多个 php (php-fpm) 版本

bash - 在模式之间返回多行的高效非贪婪方法

bash - sed-ish oneliner 在替换中执行算术

python - scikit-learn:标记化时不要分隔带连字符的单词

php - 是否有任何选项可以使用 regex/preg_split 将特殊字符与单词分开?