2015-01-28 2 views
1

Я хочу удалить все таблицы, кроме немногих из них. Я использую следующую команду:Оставьте все таблицы, кроме определенных

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, перенаправлять. Но проблема в том, что она все бросает.

+0

Удалите последнюю команду 'mysql' вместе с трубкой перед ней, чтобы увидеть, что фильтруется' grep'. По какой-то причине 'grep' нуждается в символах' | '. Кроме того, возможно, что он будет интерпретировать '(', ')' и '+' иначе, чем вы ожидаете. Возможно, вы можете упростить 'regex'. – axiac

ответ

0

ваше регулярное выражение

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

который расширенный формат (| и + не допускаются в старом Grep регулярных выражений)

попробовать это вместо

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

Или это может быть возможным для выхода из метасимволов ?, +,, |, ( и ) с обратной косой чертой

Смежные вопросы