You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:55:20