- 论坛徽章:
- 0
|
本帖最后由 ayalastrike 于 2013-01-25 16:09 编辑
我现在有几个数据库备份文件
现在想把这几个大文件中的某个表(s_caiquan_user_pklog_2, s_caiquan_user_pklog_3 )从MyISAM改为InnoDB
ENGINE=MyISAM
=>
ENGINE=InnoDB
我的思路是找到以CREATE TABLE `s_caiquan_user_pklog_XXX`开头,并从此位置开始以Engine=InnoDB结束的文本段,然后替换该文本段中的某串字符
但是不知道用sed或者awk怎么处理文本段
比如
CREATE TABLE `s_caiquan_user_pklog_2` (
`pkid` bigint(20) NOT NULL default '0',
`round` int(11) NOT NULL default '0',
`finger1` int(11) NOT NULL default '0',
`finger2` int(11) NOT NULL default '0',
`ctime` timestamp NOT NULL default CURRENT_TIMESTAMP,
UNIQUE KEY `pkid` (`pkid`,`round`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
目前我可以取出来这段文本,但是如何替换后塞回原来的文件中呢
$ sed -n '/^CREATE TABLE `s_caiquan_user_pklog_XXX/,/) ENGINE=InnoDB DEFAULT CHARSET=latin1/p' 1
CREATE TABLE `s_caiquan_user_pklog_31` (
`uid` int(11) NOT NULL default '0',
`fuid` int(11) NOT NULL default '0',
`intimacy` int(11) NOT NULL default '0',
KEY `uid` (`uid`,`fuid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
自己已经解决了
sed '/^CREATE TABLE `s_caiquan_user_pklog_XXX/,/) ENGINE=InnoDB DEFAULT CHARSET=latin1/s/) ENGINE=MyISAM DEFAULT CHARSET=latin1/) ENGINE=InnoDB DEFAULT CHARSET=latin1/' 1 |
|