2015-01-28 5 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에 따라 잘 될 것 같다. 그러나 문제는 그것이 모든 것을 버린다는 것이다.

+0

마지막'mysql' 명령을 앞에있는 파이프와 함께 제거하면'grep'으로 필터링 된 내용을 볼 수 있습니다. 어떤 이유로'grep'은'| '문자를 이스케이프 처리해야합니다. 또한'(',')'와'+'를 당신이 예상하는 것과 다르게 해석 할 수도 있습니다. 어쩌면 당신은'regex'를 단순화 할 수 있습니다. – axiac

답변

0

당신의 정규 표현식 확장 된 형식 (|+이 오래된 그렙 정규 표현식에서 허용되지 않습니다)

입니다

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

대신

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

을이 시도하거나 수도있을 것입니다 메타 문자를 이스케이프 처리합니다. ?, +, {, |, () 백 슬래시