【问题标题】: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

标签: mysql regex grep sql-drop


【解决方案1】:

你的正则表达式是

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

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

试试这个

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

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

【讨论】:

    猜你喜欢
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    相关资源
    最近更新 更多