如何批量更新graph中所有组件的DML并统一添加utf8标识
批量给DML添加utf8标识的解决方案
完全可以通过脚本批量完成修改,不需要手动逐个调整,以下是两种可直接落地的方案:
方案1:Linux/Unix环境下用sed命令快速批量处理
如果你的DML语句有明确的固定开头特征(比如以INSERT/UPDATE/DELETE等关键字开头),直接用find+sed组合递归扫描目标目录下的.mp、.ksh文件即可。
全局仅在首个DML前添加标识的命令:
find . -type f \( -name "*.mp" -o -name "*.ksh" \) -exec sed -i '0,/^\(INSERT\|UPDATE\|DELETE\|ALTER\)/s//SET NAMES utf8;\n&/' {} \;
- 命令逻辑:递归遍历当前目录下所有后缀为.mp、.ksh的文件,匹配到文件中第一个DML关键字时,在该行之前插入utf8标识
每个单独DML前都添加标识的命令:
find . -type f \( -name "*.mp" -o -name "*.ksh" \) -exec sed -i 's/^\(INSERT\|UPDATE\|DELETE\|ALTER\)/SET NAMES utf8;\n\1/' {} \;
如果你的utf8标识不是SET NAMES utf8;,直接替换命令中对应的内容即可。
方案2:Python脚本适配复杂场景
如果你的文件里存在注释、嵌套DML等特殊情况,用Python脚本做精准匹配更稳妥:
import os import re # 调整匹配规则适配你的实际DML格式 dml_pattern = re.compile(r'^\s*(INSERT|UPDATE|DELETE|ALTER)\s', re.IGNORECASE) comment_pattern = re.compile(r'^\s*(--|#|/\*)') utf8_mark = "SET NAMES utf8;\n" # 替换为你的graph文件存放目录 target_dir = "./your_graph_files_path" for root, dirs, files in os.walk(target_dir): for file in files: if file.endswith((".mp", ".ksh")): file_path = os.path.join(root, file) with open(file_path, "r", encoding="utf-8") as f: lines = f.readlines() new_lines = [] mark_added = False for line in lines: # 跳过注释行避免误匹配 if comment_pattern.match(line): new_lines.append(line) continue # 匹配到DML且还未添加标识时插入 if dml_pattern.match(line) and not mark_added: new_lines.append(utf8_mark) mark_added = True new_lines.append(line) # 写回文件 with open(file_path, "w", encoding="utf-8") as f: f.writelines(new_lines)
注意事项
- 操作前务必对所有.mp、.ksh文件做全量备份,避免规则匹配错误导致文件损坏
- 先选择1-2个测试文件验证修改结果符合预期后,再执行全量操作
内容的提问来源于stack exchange,提问作者Sonali Singh
相关产品推荐
相关产品推荐

