You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用sed或Perl正则注释OpenAM的web.xml指定servlet-mapping块

可行实现方案

两种工具的实现方式如下:

Perl 方案(兼容性更强,适配不同换行/缩进格式)

perl处理跨行文本更简单,直接读取整个文件匹配即可,命令如下:

perl -0777 -pi -e 's|(<servlet-mapping>\s*.*?<url-pattern>/ccversion/.*?</servlet-mapping>)|<!-- $1 -->|sg' web.xml

参数说明:

  • -0777:一次性读取整个文件内容,支持跨行匹配
  • s修饰符:让.可以匹配换行符
  • g修饰符:全局匹配,存在多个符合条件的块也可同时处理
  • 用|作为正则分隔符,无需转义路径中的/字符

Sed 方案

sed默认按行处理,需要用范围匹配把整个目标块加载到模式空间后再处理,命令如下:

sed -i '/<servlet-mapping>/{:a;N;/<\/servlet-mapping>/!ba;/\/ccversion/{s/^/<!-- /;s/$/ -->/}}' web.xml

逻辑说明:

  • 匹配到<servlet-mapping>行后进入块处理逻辑
  • :a定义循环标签,N把下一行加入当前处理的模式空间,没读到</servlet-mapping>闭合标签就一直循环,把完整的servlet-mapping块加载到内存
  • 检测当前块是否包含/ccversion,匹配成功则在块开头加<!-- ,末尾加 -->
  • 怕出错可以先加备份后缀测试,比如把-i改成-i.bak,验证修改没问题再删除.bak后缀的备份文件

操作提示

执行命令前建议先备份原web.xml文件,避免配置错误影响服务运行。

内容的提问来源于stack exchange,提问作者Tiberio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:36:01