如何通过Linux命令批量调整AI生成SVG文件中id属性的位置
SVG属性批量迁移Shell实现方案
操作前请务必先备份所有源SVG文件,避免正则匹配误差导致文件损坏
实现逻辑
针对你给出的固定结构SVG代码,使用sed跨行匹配,将<g>标签的id="size1"属性迁移到其内部<text>标签的属性末尾,适配Adobe Illustrator导出的标准格式SVG文件。
操作步骤
- 新建脚本文件
move_svg_id.sh,写入以下内容:
#!/bin/bash # 批量处理SVG文件,迁移g标签的id="size1"到内部text标签 # 未传入目录参数时默认处理当前目录所有svg文件 TARGET_DIR="${1:-.}" # 执行替换,自动生成.bak后缀的源文件备份 find "$TARGET_DIR" -type f -name "*.svg" -exec sed -i.bak -E ' /<g id="size1">/{ N s/<g id="size1">([[:space:]]*)<text([^>]*)>/<g>\1<text\2 id="size1">/ }' {} \; # 确认修改无误后可取消下方注释,删除所有备份文件 # find "$TARGET_DIR" -name "*.svg.bak" -delete
- 给脚本添加执行权限:
chmod +x move_svg_id.sh - 执行脚本:
- 处理当前目录下所有SVG:
./move_svg_id.sh - 处理指定目录下所有SVG:
./move_svg_id.sh /your/svg/directory/path
验证说明
你可以先拿单个测试文件执行如下命令,确认输出符合预期后再批量操作:sed -E '/<g id="size1">/{N;s/<g id="size1">([[:space:]]*)<text([^>]*)>/<g>\1<text\2 id="size1">/}' test.svg
如果你的SVG中
<g id="size1"属性后还有其他属性,或者<g>和<text>之间的行数更多,可以调整正则匹配规则适配实际场景。
内容的提问来源于stack exchange,提问作者TommyDo
相关产品推荐
相关产品推荐

