如何在Unix中用sed替换DEFAULT nextval后的内容为AUTO_INCREMENT?
用sed替换MySQL字段定义中的DEFAULT nextval为AUTO_INCREMENT
问题说明
需要将文件中每行里DEFAULT nextval之后的所有内容替换为AUTO_INCREMENT,相关数据如下:
原始数据
`id` bigint(20) NOT NULL DEFAULT nextval(`xchange_finance`.`seq_cancelled_contract_zendesk_publishing_failure`), `id` bigint(20) NOT NULL DEFAULT nextval(`xchange_finance`.`seq_invoice`), `id` bigint(20) NOT NULL DEFAULT nextval(`xchange_finance`.`seq_invoice_attachment`), `id` bigint(20) NOT NULL DEFAULT nextval(`xchange_finance`.`seq_invoice_line_item`),
预期结果
`id` bigint(20) NOT NULL AUTO_INCREMENT , `id` bigint(20) NOT NULL AUTO_INCREMENT , `id` bigint(20) NOT NULL AUTO_INCREMENT , `id` bigint(20) NOT NULL AUTO_INCREMENT
尝试过的无效命令
sed -e 's/^DEFAULT nextval.*$/AUTO_INCREMENT ,/g' test
问题原因
之前的命令错误使用了^DEFAULT正则前缀,该规则要求行首必须是DEFAULT,但原始行开头有空格;同时命令试图替换整行而非行内指定片段,导致无法匹配目标内容。
正确解决方案
基础替换命令
使用以下命令可完成核心替换逻辑:
sed -e 's/DEFAULT nextval.*$/AUTO_INCREMENT/' test
匹配预期格式的优化命令
如果需要完全对齐预期结果(前3行末尾加逗号,最后一行不加),可使用组合命令:
sed -e 's/DEFAULT nextval.*$/AUTO_INCREMENT/' test | sed -e '$!s/$/ ,/'
命令解释
s/DEFAULT nextval.*$/AUTO_INCREMENT/:匹配从DEFAULT nextval开始到行尾的所有内容,替换为AUTO_INCREMENT$!s/$/ ,/:对除最后一行外的所有行,在行尾追加空格和逗号,匹配预期格式
内容的提问来源于stack exchange,提问作者waseem mir
相关产品推荐
相关产品推荐

