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

如何用sed或awk移除XML属性并替换闭合标签?

用sed/awk实现XML标签转换需求

需求概述

需要将带有属性的<Field>标签转换为以字段名为标签名的简化格式:移除<Field>的name、type属性,并将闭合标签</Field>替换为对应字段名的闭合标签。

原XML内容

<Field name="field1" type="String">AAAA</Field>
<Field name="field2" type="Integer">0</Field>
<Field name="field4" type="String">BBBB</Field>

期望转换结果

<field1>AAAA</field1>
<field2>0</field2>
<field4>BBBB</field4>

现有尝试

已通过以下sed命令实现部分属性移除,但无法处理闭合标签替换:

sed 's/ type=".*"//' 
# and
sed 's/Field name="//' 

解决方案

方法1:使用sed(推荐)

利用sed的正则捕获组一次性完成所有替换,命令如下:

sed -E 's/<Field name="([^"]+)" type="[^"]+">([^<]+)<\/Field>/<\1>\2<\/\1>/' input.xml
  • -E:开启扩展正则表达式,无需对括号转义
  • ([^"]+):精准捕获双引号内的字段名,避免匹配其他属性内容
  • ([^<]+):捕获标签内的文本内容(假设内容不含<符号)
  • <\1>\2<\/\1>:将捕获的字段名和内容拼接成目标格式

方法2:使用awk

通过设置多分隔符拆分每行内容,再拼接成目标格式:

awk -F '<Field name="|\" type=\"[^\"]+\">|</Field>' '{print "<"$2">"$3"</"$2">"}' input.xml
  • -F:指定多个分隔符,将每行拆分为字段名、内容等部分
  • $2对应捕获的字段名,$3对应标签内的文本内容,直接拼接输出目标标签格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:05:24