删除除特定表之外的所有表

Posted

技术标签:

【中文标题】删除除特定表之外的所有表【英文标题】:Drop all tables except specific ones 【发布时间】:2015-03-27 08:32:38 【问题描述】:

我想删除所有表格,除了少数几个。我正在使用以下命令:

mysqldump -uroot -pxxx --add-drop-table --no-data database | grep ^DROP | grep -v "^(cache|webform|redirect)([_a-z0-9]?)+$" | mysql -uroot -pxxx database

根据http://www.regexr.com/3aa8k,正则表达式似乎没问题,因为我想跳过的表是缓存*、webform*、重定向。但问题是它会丢弃所有内容。

【问题讨论】:

把最后一个mysql命令连同它前面的管道一起去掉,看看grep过滤了什么。出于某种原因,grep 需要对 | 字符进行转义。此外,它对()+ 的解释可能与您的预期不同。也许你可以简化regex 【参考方案1】:

你的正则表达式是

grep -v "^(cache|webform|redirect)([_a-z0-9]?)+$"

这是扩展格式(旧的 grep regexp 中不允许使用|+

试试这个

grep -Ev "^(cache|webform|redirect)([_a-z0-9]?)+$"

或者可以使用反斜杠转义元字符 ?+|()

【讨论】:

以上是关于删除除特定表之外的所有表的主要内容,如果未能解决你的问题,请参考以下文章

jQuery删除除第一行之外的所有表行

MS-ACCESS:删除除 top 1 之外的所有行并从查询中更新表

删除除具有最大值的行之外的所有行

删除除给定查询获取的所有记录之外的所有记录

为除一个/几个表之外的所有表授予 [几乎] 所有 mySQL 权限

如何使用 SQLAlchemy 核心选择除 postgresql 中的 1 个特定列之外的所有表列?