mysql - 如何从 mysql 转储中获取所有完整的 CREATE TABLE 语句

标签 mysql regex awk sed

到目前为止我得到了这个:

$ bzcat mysqldump.pplware.sql.bz2 | grep -A 10 "^CREATE TABLE.*"
CREATE TABLE `wp_ak_twitter` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `tw_id` varchar(255) NOT NULL,
  `tw_text` varchar(255) NOT NULL,
  `tw_reply_username` varchar(255) DEFAULT NULL,
  `tw_reply_tweet` varchar(255) DEFAULT NULL,
  `tw_created_at` datetime NOT NULL,
  `modified` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `tw_id` (`tw_id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
--
CREATE TABLE `wp_audit_trail` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `operation` varchar(40) NOT NULL DEFAULT '',
  `user_id` int(11) NOT NULL,
  `ip` int(11) unsigned NOT NULL DEFAULT '0',
  `happened_at` datetime NOT NULL,
  `item_id` int(11) DEFAULT NULL,
  `data` longtext,
  `title` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9442523 DEFAULT CHARSET=latin1;

..等等。 但 10 行限制是任意的,有些 CREATE TABLES 较短,有些较长。如何获得所有完整的 CREATE TABLE 定义?

最佳答案

如何在模式之间打印行:CREATE TABLE; 分号:-

bzcat mysqldump.pplware.sql.bz2 | awk '/CREATE TABLE/{f=1}/\;/{f=0}f||/\;/'

或者

bzcat mysqldump.pplware.sql.bz2 | awk '/CREATE TABLE/,/\;/'

关于mysql - 如何从 mysql 转储中获取所有完整的 CREATE TABLE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47657581/

相关文章:

Python 正则表达式模块即使重叠 = True 也找不到所有匹配项

c - 在计算发送到 C 文件后使用 AWK 打印列

来自函数的 PHP 图像

mysql - 检索每组中的最后一条记录 - MySQL

Javascript 链接自动嵌入与正则表达式

c# - 如何匹配字符串,忽略结束换行符?

linux - 在 Unix 中比较两个大文件

每个数据 block 的 linux awk 和 grep 特定行

mysql - Magento 升级 1.3 和 INNODB/MYISAM

c# - MySql、Ninject 和 NHibernate - 已经有一个与此连接关联的打开的 DataReader,必须先将其关闭