У меня есть огромный файл резервной копии MySQL (из mysqldump) с таблицами в алфавитном порядке. Мое восстановление не удалось, и я хочу продолжить с того места, где остановился, со следующей таблицей в файле резервной копии. (Я исправил проблему, на самом деле это не вопрос восстановления MySQL и т. д.)
Что я хотел бы сделать, так это взять файл резервной копии, например. резервная копия.sql
и обрезаю начало файла, пока не увижу эту строку:
-- Структура таблицы для `mytable`
Тогда все после этого попадет в мой файл результатов, скажем резервное копирование-secondhalf.sql
. Это несколько усложняется тем фактом, что файл сжат bzip2, но это не должно быть слишком большой проблемой.
Я думаю, что я могу сделать это так:
$ bunzip2 -c backup.sql.bz2 | grep --text --byte-offset --only-matching -e '--Структура таблицы для таблицы `mytable`' -m 1
Это даст мне байтовое смещение в файле, который я хочу обрезать. вплоть до. Затем:
$ bunzip2 -c backup.sql.bz2 | dd skip=[число сверху] | bzip2 -c > резервная копия-вторая половина.sql.bz2
К сожалению, для этого мне нужно дважды запустить bunzip2 для файла и дважды прочитать все эти байты.
Есть ли способ сделать это все сразу?
Я не уверен, что мой sed-fu достаточно силен, чтобы выполнить выражение «удалить все строки до регулярного выражения, а затем пропустить остальную часть файла».
Это на Debian Linux, поэтому у меня есть инструменты GNU.