ฉันมีไฟล์สำรองข้อมูล MySQL ขนาดใหญ่ (จาก mysqldump) พร้อมตารางตามลำดับตัวอักษร การคืนค่าของฉันล้มเหลว และฉันต้องการดำเนินการต่อจากจุดที่ฉันค้างไว้ด้วยตารางถัดไปในไฟล์สำรอง (ฉันได้แก้ไขปัญหาแล้ว นี่ไม่ใช่คำถามเกี่ยวกับการกู้คืน MySQL ฯลฯ)
สิ่งที่ฉันต้องการจะทำคือนำไฟล์สำรองของฉันเช่น backup.sql
และตัดส่วนต้นของไฟล์ออกจนกว่าฉันจะเห็นบรรทัดนี้:
-- โครงสร้างตารางสำหรับ `mytable`
จากนั้นทุกอย่างหลังจากนั้นจะจบลงในไฟล์ผลลัพธ์ของฉัน พูด สำรองข้อมูล Secondhalf.sql
. สิ่งนี้ค่อนข้างซับซ้อนเนื่องจากไฟล์ถูกบีบอัดด้วย bzip2 แต่นั่นก็ไม่ใช่เรื่องใหญ่เกินไป
ฉันคิดว่าฉันสามารถทำได้ดังนี้:
$bunzip2 -c backup.sql.bz2 | grep --text --byte-offset --only-matching -e '--Table structure for table `mytable`' -m 1
สิ่งนี้จะให้ค่าชดเชยไบต์ในไฟล์ที่ฉันต้องการตัดแต่ง จนถึง. แล้ว:
$bunzip2 -c backup.sql.bz2 | dd ข้าม = [ตัวเลขจากด้านบน] | bzip2 -c > สำรองข้อมูลครึ่งหลัง sql.bz2
น่าเสียดายที่ฉันต้องเรียกใช้ bunzip2 บนไฟล์สองครั้งและอ่านผ่านไบต์เหล่านั้นทั้งหมดสองครั้ง
มีวิธีทำทั้งหมดในครั้งเดียวหรือไม่?
ฉันไม่แน่ใจว่า sed-fu ของฉันแข็งแกร่งพอที่จะทำนิพจน์ "ลบทุกบรรทัดจนกว่าจะมีนิพจน์ปกติ จากนั้นปล่อยให้ไฟล์ที่เหลือผ่าน"
นี่คือบน Debian Linux ดังนั้นฉันจึงมีเครื่องมือ GNU