โฮมเพจ » ทำอย่างไร » วิธีการลบ Lines จากตรงกลางไฟล์โดยใช้ Terminal Linux

    วิธีการลบ Lines จากตรงกลางไฟล์โดยใช้ Terminal Linux

    เมื่อคุณจัดการเซิร์ฟเวอร์ของคุณเองสิ่งหนึ่งที่คุณจำเป็นต้องทำเป็นประจำคือการแยกข้อมูลจากกลางไฟล์ อาจเป็นไฟล์บันทึกหรือคุณต้องเพิ่มตารางเดียวจากตรงกลางของไฟล์สำรอง MySQL ของคุณเหมือนที่ฉันทำ.

    ในการค้นหาหมายเลขบรรทัดคำสั่ง grep -n อย่างง่ายทำหน้าที่ (อาร์กิวเมนต์ -n แสดงผลหมายเลขบรรทัด) สิ่งนี้ทำให้ง่ายต่อการค้นหาสิ่งที่ฉันต้องการสกัด.

    grep -n wp_posts howtogeekdb010114.bak | มากกว่า

    ให้ผลลัพธ์เป็นแบบนี้ซึ่งแสดงหมายเลขบรรทัดทางด้านซ้ายของเอาต์พุต การวางทุกอย่างลงใน "เพิ่มเติม" ทำให้แน่ใจว่าคุณสามารถเห็นบรรทัดแรกโดยไม่ต้องเลื่อน ตอนนี้คุณมีหมายเลขบรรทัดที่จะเริ่มต้นด้วยและอาจเป็นหมายเลขสุดท้าย.

    4160: - โครงสร้างตารางสำหรับตาราง 'wp_posts' 4163: DROP Table IF EXISTS 'wp_posts' EXISTS 4166: สร้างตาราง 'wp_posts' (4203: - ข้อมูลทุ่มตลาดสำหรับตาราง 'wp_posts' 4206: ล็อก LOCK TABLES 'wp_posts' WRITE; 4207: / *! 40000 ALTER ตาราง 'wp_posts' DISABLE คีย์ * /; 4208: INSERT INTO 'wp_posts' 'ค่า (1,2,' 2006-09-11 05:07:23 ',' 2006-09-11

    แน่นอนคุณสามารถเพียงแค่ไพพ์เอาท์พุทจาก grep ไปยังไฟล์อื่นเช่นนี้:

    คำหลัก grep filename.txt> outputfile

    ในกรณีของฉันที่ไม่ต้องการทำงานเพราะฉันไม่สามารถนำเข้าข้อมูลสำรองที่เป็นผลลัพธ์ได้ด้วยเหตุผลบางประการ ดังนั้นฉันจึงพบวิธีที่แตกต่างในการแยกบรรทัดโดยใช้ sed และวิธีนี้ใช้งานได้.

    sed -n '4160,4209p' howtogeekdb0101140201.bak> outputfile

    โดยทั่วไปไวยากรณ์เป็นเช่นนี้ตรวจสอบให้แน่ใจว่าใช้อาร์กิวเมนต์ -n และรวม“ p” หลังหมายเลขบรรทัดที่สอง.

    sed -n 'FIRSTLINENUMBER, LASTLINENUMBERp' ชื่อไฟล์> outputfilename

    วิธีอื่น ๆ ที่คุณสามารถดึงออกมาจากบรรทัดที่เฉพาะเจาะจงในช่วงกลางของไฟล์? คุณสามารถใช้คำสั่ง "head" กับอาร์กิวเมนต์ + number เพื่ออ่านบรรทัด x แรกของไฟล์จากนั้นใช้ tail เพื่อแยกบรรทัดเหล่านั้น ไม่ใช่ตัวเลือกที่ดีที่สุด แต่มีค่าใช้จ่ายมากมาย ตัวเลือกที่ง่ายกว่า? คุณสามารถใช้คำสั่ง split เพื่อเปลี่ยนไฟล์เป็นหลาย ๆ ไฟล์ได้ที่หมายเลขบรรทัดที่คุณต้องการจากนั้นแยกบรรทัดโดยใช้ส่วนหัวหรือส่วนท้าย.

    หรือคุณสามารถใช้ sed.