Вы можете использовать опцию --ignore-table. Таким образом, вы можете сделать
mysqldump -u USERNAME -pPASSWORD --ignore-table=database.table1 > database.sql
После -p нет пробелов (это не опечатка).
Если вы хотите игнорировать несколько таблиц, вы можете использовать простой скрипт как это
#!/bin/bash
PASSWORD=XXXXXX
HOST=XXXXXX
USER=XXXXXX
DATABASE=databasename
DB_FILE=dump.sql
EXCLUDED_TABLES=(
table1
table2
table3
table4
tableN
)
IGNORED_TABLES_STRING=''
for TABLE in "${EXCLUDED_TABLES[@]}"
do :
IGNORED_TABLES_STRING+=" --ignore-table=${DATABASE}.${TABLE}"
done
echo "Dump structure"
mysqldump --host=${HOST} --user=${USER} --password=${PASSWORD} --single-transaction --no-data ${DATABASE} > ${DB_FILE}
echo "Dump content"
mysqldump --host=${HOST} --user=${USER} --password=${PASSWORD} ${DATABASE} --no-create-info ${IGNORED_TABLES_STRING} >> ${DB_FILE}
Проблема в том, что желаемое решение настаивает на использовании групп захвата. C ++ предоставляет инструмент regex_token_iterator
, чтобы лучше обрабатывать это (пример C ++ 11):
#include & lt; iostream & gt; #include & lt; string & gt; #include & lt; regex & gt; использование пространства имен std; int main () {std :: regex e (R "((?: ^ - Числа)? \ s * (\ d +))"); ввод строки; while (getline (cin, input)) {std :: regex_token_iterator & lt; std :: string :: iterator & gt; a {input.begin (), input.end (), e, 1, regex_constants :: match_continuous}; станд :: regex_token_iterator & Lt; станд :: строка :: итератор & GT; конец; в то время как (a! = конец) {cout & lt; & lt; "-"; ++ а; } cout & lt; '\n'; } return 0; }
Я собирался задать этот один и тот же вопрос, и я нашел решение.
Предположим, у вас есть произвольное количество слов, которые вы хотите захватить.
" есть четыре огня: «
и
« капитан-пикард - это бомба »
Вы можете подумать, что решение:
/ ((\ w +) \ s?) + /
Но это будет соответствовать только всей входной строке и последней захваченной группе.
Что вы можете do использует переключатель «g».
Итак, пример в Perl:
use strict; использовать предупреждения; my $ str1 = "есть четыре огня"; мой $ str2 = «капитан-пикард - это бомба»; foreach ($ str1, $ str2) {my @a = ($ _ = ~ / (\ w +) \ s? / g); print "захваченных групп:". join ("|", @a). "\n"; }
Вывод:
захваченных групп: есть | четыре | огни захваченных групп: captain | picard | is | the | bomb [ ! d2]
Итак, есть решение, если ваш язык выбора поддерживает эквивалент «g» (и я думаю, что большинство из них ...).
Надеюсь, это поможет кому-то который был в том же положении, что и я!
S