删除除特定表之外的所有表
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]?)+$"
或者可以使用反斜杠转义元字符 ?
、+
、、
|
、(
和 )
【讨论】:
以上是关于删除除特定表之外的所有表的主要内容,如果未能解决你的问题,请参考以下文章
MS-ACCESS:删除除 top 1 之外的所有行并从查询中更新表