寻求Zsh脚本批量将XML特殊字符转为HTML十进制实体
macOS Zsh 批量替换XML特殊字符脚本
直接用下面的Zsh脚本批量处理不同文件夹下的同名XML文件,把指定特殊字符替换为对应HTML十进制实体,解决xlsxwriter导入报错的问题:
#!/usr/bin/env zsh # 替换成你要处理的XML文件名(所有文件夹下的这个文件都会被处理) XML_FILENAME="your_file.xml" # 定义特殊字符到HTML十进制实体的映射,按需添加或修改 REPLACE_RULES=( # 非断空格(<0xa0>)→   's/\xc2\xa0/ /g' # ï → ï 's/\xc3\xaf/ï/g' # è → è 's/\xc3\xa8/è/g' # em dash(—)→ — 's/\xe2\x80\x94/—/g' ) # 递归查找所有子目录中的目标XML文件并处理 find . -name "$XML_FILENAME" -type f | while read -r file; do # 先备份原文件(后缀加.bak),防止替换出错 cp "$file" "$file.bak" # 应用所有替换规则 sed -i '' "${REPLACE_RULES[@]}" "$file" echo "已处理文件:$file" done echo "批量替换完成,原文件已备份为.bak后缀"
使用说明:
- 将上述代码保存为
replace_special_chars.zsh - 打开终端,给脚本加执行权限:
chmod +x replace_special_chars.zsh - 修改脚本里的
XML_FILENAME为你实际要处理的XML文件名 - 如果有更多特殊字符需要替换,直接在
REPLACE_RULES数组里按格式添加新的替换规则(macOS下可以用hexdump -C命令查看字符的十六进制编码) - 进入存放XML文件的根目录,运行脚本:
./replace_special_chars.zsh
注意事项:
- 脚本会自动备份原文件(每个处理后的文件会生成同名的
.bak备份),如果替换出错可以直接恢复 - macOS自带的sed需要加
-i ''参数实现原地替换,不要省略空字符串参数,否则会生成异常后缀的文件
内容的提问来源于stack exchange,提问作者Craig Daters
相关产品推荐
相关产品推荐

