ฉันต้องลบ 42 บรรทัดแรกของดัมพ์ SQL 2GB
ฉันรู้ว่าฉันสามารถดูบรรทัดแรกโดยใช้:
head -n 44 dump.sql
แต่จะมีการแก้ไขหรือลบต่อไปหรือไม่
ฉันต้องลบ 42 บรรทัดแรกของดัมพ์ SQL 2GB
ฉันรู้ว่าฉันสามารถดูบรรทัดแรกโดยใช้:
head -n 44 dump.sql
แต่จะมีการแก้ไขหรือลบต่อไปหรือไม่
คำตอบ:
หากคุณต้องการดูบรรทัดจาก 43 บนคุณสามารถใช้
tail -n +43 dump.sql
+
สัญญาณเป็นสิ่งสำคัญ - ไม่ว่าtail
จะพิมพ์สุดท้าย 43 สายแทน อีกทางเลือกหนึ่งด้วย 'sed'
sed 1,42d dump.sql
หากคุณต้องการลบ 42 บรรทัดแรกจากไฟล์ต้นฉบับคุณสามารถทำการเปลี่ยนแปลงภายใน-i
ตัวเลือกได้
sed -i 1,42d dump.sql
sed -i 1,50000000d 17GigFile
สร้างไฟล์ temp sedXYZ
ที่ใช้กิกะไบต์มากขึ้น มีวิธีการที่ไม่มีไฟล์ temp หรือไม่
tail -n +43
และhead -n 44
ตามที่กล่าวถึงในคำถามคืออะไร?
นี่เป็นวิธีที่ง่ายที่สุด:
sed '1,42d' test.sql > test2.sql
ลบบรรทัด 1-42 ออกจาก test.sql และบันทึกเป็น test2.sql
ลองนี้
tail -n +43 dump.sql > dump_new.sql
คุณสามารถใช้ Vim ในโหมด Ex:
ex -s -c '1d42|x' dump.sql
1
ย้ายไปที่บรรทัดแรก
42
เลือก 42 บรรทัด
d
ลบ
x
บันทึกและปิด
ขออภัยฉันไม่สามารถให้รหัสจริงแก่คุณได้ในขณะนี้ อย่างไรก็ตามลองดูสิ่งที่อยู่ในแนวของ
tail -n arcv(`wc -l`) -44
สิ่งที่ควรทำ (เมื่อจัดรูปแบบอย่างถูกต้อง) จะนับจำนวนบรรทัดในไฟล์ (wc -l), ลบ 44 จากมัน (-44) จากนั้นพิมพ์ทุกอย่างที่เริ่มต้นด้วยบรรทัดที่ 45 ในไฟล์
หวังว่าสิ่งนี้จะช่วยและโชคดี
wc -l
ใช้ไฟล์คุณดำเนินการสองครั้งในขณะที่sed
หรือtail
ดำเนินการเพียงครั้งเดียว
ลองนี้
head -n 42 dump.sql > tmp; cat dump.sql | grep -vxf tmp > dump.sql.new; rm tmp
หรือ,
a=$(cat dump.sql| wc -l); tail -n "$((a-42))" dump.sql > dump.sql.new
เพียงเพิ่ม หากคุณใช้ Mac คุณจะต้องเพิ่มนามสกุลสำรอง คำตอบจากโพสต์นี้
sed -i '.bak' 1,42d dump.sql
เนื่องจากsed
ความแตกต่างใน Linux และ Mac ฉันจึงตัดสินใจใช้tail -n +43 dump.sql > dump.sql
รูปแบบ
tail
คำตอบที่น่ากลัวใช้งานที่ยอดเยี่ยมของ ฉันพบสิ่งใหม่หลายครั้งที่จะเรียนรู้จากคำตอบของคุณ ขอบคุณ