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

如何用Bash删除XML文件中指定的<types>代码块?

可行的Bash解决方案

针对你的需求,这里提供几种可靠的方法来删除指定的<types>代码块:

方法1:使用awk(跨平台兼容,无需额外安装)

awk处理多行文本的能力更稳定,适合这种场景:

awk '
/<types>/{block=""; in_block=1}
in_block{block=block $0 "\n"}
/<\/types>/{
    in_block=0
    if (block !~ /CustomObjectTranslation/) print block
}
!in_block
' package.xml > cleaned_package.xml

说明:

  • 检测到<types>时,开始收集整个代码块的内容
  • 遇到</types>时,判断块内是否包含CustomObjectTranslation,不包含则输出该块
  • 非代码块的内容直接输出
  • 结果会保存到cleaned_package.xml,可替换为你需要的文件名

方法2:使用sed(适合GNU/Linux环境)

如果你的环境是GNU sed(大部分Linux发行版默认),可以用多行匹配命令:

sed -e '/<types>/{:a;N;/<\/types>/!ba;/CustomObjectTranslation/d}' package.xml > cleaned_package.xml

说明:

  • /<types>/定位到代码块起始行
  • :a;N;/<\/types>/!ba循环读取所有行直到</types>,将整个块放入模式空间
  • 如果模式空间包含CustomObjectTranslation,则删除整个块
  • macOS默认的BSD sed需调整语法:sed -e '/<types>/{:a;N;/<\/types>/!ba;/CustomObjectTranslation/d;}' package.xml

方法3:使用XML专用工具(最可靠,推荐)

正则处理XML存在结构变化时失效的风险,用专门的XML工具更稳妥,比如xmlstarlet:

  1. 先安装工具:
    • Ubuntu/Debian:sudo apt install xmlstarlet
    • macOS:brew install xmlstarlet
  2. 执行删除命令:
xmlstarlet ed -d '/Package/types[name="CustomObjectTranslation"]' package.xml > cleaned_package.xml

说明:

  • 该命令直接解析XML结构,定位到Package下name为CustomObjectTranslation的types节点并删除
  • 完全避免了正则匹配的局限性,适合复杂XML场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:02:58