บางครั้งเราจำเป็นต้องลบเฉพาะบรรทัดใดบรรทัดหนึ่งออกจากไฟล์หนึ่งไฟล์หรือมากกว่านั้น ตัวอย่างเช่น ผมมีไฟล์อยู่หลายไฟล์ และผมต้องการลบบรรทัดที่ 27 ออกจากทุกไฟล์ (บรรทัดที่ 27 คือ ACL, กฎ หรือการตั้งค่า) ผมสามารถแก้ไขทีละไฟล์ หรือผมสามารถทำสิ่งที่ต้องการได้โดยใช้ คำสั่ง sedและสคริปต์ bash (ไม่จำเป็น)
แต่เรามาลองใช้ไฟล์เดียวกันบ้าง
เรามี ไฟล์distros-deb.txtซึ่งมีเนื้อหาดังนี้:
เดเบียน
Kubuntu
ArchLinux
โซลัส
โรงกระษาปณ์
กล่าวอีกนัยหนึ่ง ไฟล์ distros-deb.txtคือที่ที่เราจะระบุรายชื่อดิสทริบิวชันที่ใช้ Debian เป็นพื้นฐาน แต่เราพบว่าบรรทัดที่ 3 มีคำว่า "archlinux" ซึ่งเป็นดิสทริบิวชันที่ไม่มีส่วนเกี่ยวข้องกับ Debian อย่างชัดเจน ดังนั้นเราจึงต้องลบบรรทัดนั้นออก ในการลบบรรทัดที่ 3 ออกจากไฟล์นั้น เราจะเพิ่มข้อความต่อไปนี้:
sed "3d" distros-deb.txt > distros-deb-ok.txt
อธิบายบรรทัดนี้ได้ง่ายๆ คือ`sed "3d"`เรากำลังระบุว่าเราจะลบบรรทัดที่ 3 ส่วน`distros-deb.txt`เราบอกไฟล์ที่จะลบบรรทัดที่ 3 จากไฟล์นี้ ก่อนหน้านี้ ถ้าเรากด `<kbd>Enter</kbd>` มันจะแสดงผลลัพธ์ที่เราต้องการในเทอร์มินัล ดังนั้น`> distros-deb-ok.txt`เรากำลังระบุว่าแทนที่จะแสดงผลลัพธ์ในเทอร์มินัล มันควรบันทึกผลลัพธ์ลงในไฟล์ชื่อนี้
อะไรง่ายๆ?
เราสามารถหลีกเลี่ยงการใช้ไฟล์> distros-deb-ok.txt ได้โดยใช้ พารามิเตอร์sedคือ พารามิเตอร์ -i
กล่าวอีกนัยหนึ่ง หากเราต้องการลบบรรทัดนั้นออกจากไฟล์และบันทึกไฟล์นั้นด้วยชื่อเดิม (โดยไม่บันทึกในไฟล์ใหม่) เราเพียงแค่ต้องเพิ่ม พารามิเตอร์ -i :
sed -i "3d" distros-deb.txt
การดำเนินการนี้จะลบบรรทัด # 3 ออกจาก distros-deb.txt และบันทึก
จะเป็นอย่างไรถ้าฉันต้องการช่วงของบรรทัดนั่นคือการลบบรรทัด # 3 แต่ยังเป็น # 4 และ # 5 เพื่อให้บรรลุสิ่งนี้เราใส่ช่วงตั้งแต่ 3 ถึง 5 นั่นคือ:
sed -i "3,5d" distros-deb.txt
และมันจะแสดงเฉพาะเดเบียนและคูบุนตู เท่านั้น
แล้วถ้าฉันต้องการลบจากบรรทัดที่ 2 ไปยังบรรทัดสุดท้ายเมื่อฉันไม่ทราบจำนวนบรรทัดทั้งหมด?
เพียงใช้สัญลักษณ์ดอลลาร์ - » $
sed -i "2,$d" distros-deb.txt
ในกรณีที่คุณต้องการกำจัดจากบรรทัดแรกถึง # 4 เราก็ใส่ค่า 1 ที่จุดเริ่มต้น:
sed -i "1,4d" distros-deb.txt
โดยสรุปแล้วก็ประมาณนี้แหละครับ เป็นเคล็ดลับที่มีประโยชน์มากเมื่อคุณต้องการเขียนสคริปต์ Bash เพื่อทำงานอัตโนมัติและจำเป็นต้องแก้ไขและลบบรรทัดในไฟล์การกำหนดค่า สำหรับการแก้ไข เราสามารถใช้sedหรือperlได้ และสำหรับการลบ เราก็รู้วิธีทำด้วย sed อยู่แล้ว
ความนับถือ