Am un fișier de rezervă uriaș MySQL (de la mysqldump) cu tabelele în ordine alfabetică. Restaurarea mea a eșuat și vreau să reiau de unde am rămas cu următorul tabel din fișierul de rezervă. (Am corectat problema, aceasta nu este chiar o întrebare despre restaurările MySQL etc.)
Ceea ce aș dori să fac este să îmi iau fișierul de rezervă, de ex. backup.sql
și decupează începutul fișierului până când văd această linie:
-- Structura tabelului pentru `mytable`
Apoi, totul după aceea va ajunge în fișierul meu rezultat, să zicem backup-secondhalf.sql
. Acest lucru este oarecum complicat de faptul că fișierul este comprimat bzip2, dar asta nu ar trebui să fie o afacere prea mare.
Cred ca pot sa fac asa:
$ bunzip2 -c backup.sql.bz2 | grep --text --byte-offset --only-matching -e '--Structura tabelului pentru tabelul `mytable`' -m 1
Acest lucru îmi va oferi offset-ul de octeți din fișierul pe care vreau să-l decup pâna la. Atunci:
$ bunzip2 -c backup.sql.bz2 | dd skip=[numărul de sus] | bzip2 -c > backup-secondhalf.sql.bz2
Din păcate, acest lucru necesită să rulez bunzip2 pe fișier de două ori și să citesc toți acești octeți de două ori.
Există vreo modalitate de a face asta dintr-o dată?
Nu sunt sigur că sed-fu-ul meu este suficient de puternic pentru a face o expresie „șterge toate liniile până la expresia obișnuită, apoi lăsați restul fișierului să treacă”.
Acesta este pe Debian Linux, așa că am instrumente GNU disponibile.