如何使用SED命令删除多行SQL建表语句末尾的多余逗号
sed 默认按单行读取处理内容,你原来的表达式无法匹配跨行的逗号和闭合括号,可使用以下方案解决:
方案1:GNU Sed(大部分Linux发行版默认自带)
使用-z参数将整个文件读取为单个处理块,直接匹配跨行的空白字符:
sed -i.bak 's/,[[:space:]]*)/)/g' 你的SQL文件路径
-i.bak会直接修改原文件,同时生成后缀为.bak的备份文件,不需要备份可直接写-i- 规则逻辑:匹配逗号+任意数量空白字符(含换行、空格、制表符)+闭合括号的组合,整体替换为单个闭合括号,
g参数表示全局替换所有符合条件的片段
方案2:BSD Sed(macOS默认自带)
如果是macOS环境,默认的BSD Sed没有-z参数,可使用以下兼容写法:
sed -i.bak -e '/,$/{N;/[[:space:]]*)/{s/,[[:space:]]*\n[[:space:]]*)/)/;P;D}}' 你的SQL文件路径
两种方案处理后,生成的SQL都会自动删除最后一个字段/索引定义后的多余逗号,符合语法要求。
内容的提问来源于stack exchange,提问作者Gabriele Muscas
相关产品推荐
相关产品推荐

