如何使用Awk合并XML中连续重复的<a:t>标签内容?
这个需求完全可以实现,使用Awk即可高效完成,无需提前掌握所有可能出现的其他标签列表。
实现思路
- 维护一个临时变量存储连续
<a:t>标签内的文本内容 - 逐行扫描文件:
- 若当前行是
<a:t>标签行,提取标签中间的文本追加到临时变量,跳过当前行输出 - 若当前行不是
<a:t>标签行,先判断临时变量是否有内容:如果有则输出拼接完成的完整<a:t>行,清空临时变量,再输出当前非<a:t>行
- 若当前行是
- 最后兜底处理文件末尾剩余的未输出拼接内容
可用脚本
awk ' # 匹配a:t标签行 /<a:t>.*<\/a:t>/{ if(match($0, /<a:t>(.*)<\/a:t>/, arr)){ content = content arr[1] } next } # 处理非a:t标签行 { if(content != ""){ print "<a:t>" content "</a:t>" content = "" } print } # 处理文件末尾的剩余内容 END{ if(content != ""){ print "<a:t>" content "</a:t>" } } ' 输入文件.xml > 输出文件.xml
适配说明
如果你的<a:t>标签行严格独占一行且无前置缩进,可以将第一行的匹配规则改为/^<a:t>/提升匹配准确性。用你提供的示例文件测试,该脚本输出结果和你预期的效果完全一致。
内容的提问来源于stack exchange,提问作者Kspael
相关产品推荐
相关产品推荐

