如何批量复制XML中g:id行,替换为sku并截断下划线后内容?
方法1:使用sed命令(最快,适合Linux/macOS环境)
1万条数据仅需毫秒级处理,直接一行命令完成:
- GNU sed(Linux系统默认):
sed -E '/<g:id><!\[CDATA\[([^_]+)_.*/{p;s//<sku><![CDATA[\1]]><\/sku>/}' 原文件.xml > 处理后文件.xml
- macOS自带sed:
sed -E -i '' '/<g:id><!\[CDATA\[([^_]+)_.*/{p;s//<sku><![CDATA[\1]]><\/sku>/}' 原文件.xml
命令逻辑:匹配到g:id行时,先打印原行,再将行内容替换为要求的sku行输出,([^_]+)会捕获下划线之前的ID内容直接复用。
方法2:使用Python脚本(兼容性最好,可调性强)
如果需要更灵活的规则调整,或者是Windows环境,用以下脚本即可:
import re # 配置路径 INPUT_PATH = "你的原文件路径.xml" OUTPUT_PATH = "处理后的文件路径.xml" id_pattern = re.compile(r'^<g:id><!\[CDATA\[([^_]+)_[^\]]*\]\]></g:id>$') with open(INPUT_PATH, 'r', encoding='utf-8') as f_in, open(OUTPUT_PATH, 'w', encoding='utf-8') as f_out: for line in f_in: # 先写入原行 f_out.write(line) # 匹配到g:id行时追加sku行 match_res = id_pattern.match(line.strip()) if match_res: f_out.write(f'<sku><![CDATA[{match_res.group(1)}]]></sku>\n')
注意事项
处理前务必先备份原文件,可先截取一小段样本测试匹配效果,确认生成的sku行符合要求后再全量处理。
内容的提问来源于stack exchange,提问作者Manos Krokos
相关产品推荐
相关产品推荐

