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

如何在Bash中为指定XML标签添加前置字符串(从文本文件取标签名)

解决方法

推荐方案:用XSLT处理(XML结构化工具,避免正则坑)

XML是结构化文档,用sed这类文本工具容易因为换行、嵌套、属性顺序等问题出错,优先用专门的XML处理工具xsltproc。

步骤1:整理标签名文件

把存储标签名的文本文件(比如命名为categories.txt)改成每行一个名称的格式:

name1
name2
name3

步骤2:自动生成XSLT样式表

用awk读取标签名文件,自动生成匹配指定Category标签的XSLT规则:

awk -v q="'" 'BEGIN{print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n  <xsl:template match=\"@*|node()\">\n    <xsl:copy>\n      <xsl:apply-templates select=\"@*|node()\"/>\n    </xsl:copy>\n  </xsl:template>\n  <xsl:template match=\""} {printf "Category[@name=%s%s%s]%s", q, $0, q, NR==FNR?" | ":""} END{print "\">\n    <xsl:copy>\n      <xsl:apply-templates select=\"@*\"/>\n      <xsl:text>VALUE4</xsl:text>\n      <xsl:apply-templates select=\"node()\"/>\n    </xsl:copy>\n  </xsl:template>\n</xsl:stylesheet>"}' categories.txt > add_value.xsl

步骤3:处理XML文件

用xsltproc执行样式表,生成修改后的XML:

xsltproc add_value.xsl 你的XML文件名.xml > 修改后的XML文件名.xml

备选方案:用sed处理(仅适用于结构简单的XML)

如果你的XML结构非常规整(Category标签内容无换行、无嵌套),可以用sed批量生成替换规则:

步骤1:生成sed脚本规则

sed 's/.*/\/<Category name="&">/,\/<\/Category>/s/^\(.*\)/VALUE4\1/' categories.txt | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/;/g' > sed_script.txt

步骤2:执行sed替换

sed -f sed_script.txt 你的XML文件名.xml > 修改后的XML文件名.xml

注意:如果XML中Category标签存在换行、嵌套或属性顺序变化,这个方法会失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:52:42