วิธีลบบรรทัดเฉพาะออกจากไฟล์โดยใช้ sed

ในบางครั้งเราจำเป็นต้องลบบรรทัดเฉพาะออกจากไฟล์หรือหลาย ๆ บรรทัดเช่นเกิดขึ้นกับฉันว่าฉันมีรายการไฟล์ทั้งหมดและฉันต้องลบบรรทัด # 27 ของทั้งหมดเหล่านี้ (บรรทัด # 27 คือของ ACL , บรรทัดฐาน, กฎ, การกำหนดค่า) ฉันสามารถแก้ไขไฟล์ทีละไฟล์หรือฉันสามารถบรรลุสิ่งที่ต้องการได้โดยใช้คำสั่ง ความกระหายน้ำ และสคริปต์ทุบตี (ไม่บังคับ)

แต่เรามาลองใช้ไฟล์เดียวกันบ้าง

เรามีไฟล์ distros-deb.txt ซึ่งประกอบด้วยสิ่งนี้:

เดเบียน

Kubuntu

ArchLinux

โซลัส

โรงกระษาปณ์

นั่นคือไฟล์ distros-deb.txt คือสิ่งที่เราจะใส่ Distros ที่ใช้ Debian แต่ที่นั่นเราเห็นว่าในบรรทัด # 3 คือ "archlinux" ซึ่งเป็น distro ที่เห็นได้ชัดว่าไม่มีอะไรเกี่ยวข้องกับ Debian ดังนั้นเราต้องกำจัดบรรทัดนั้นทิ้ง ในการกำจัดบรรทัด # 3 ของไฟล์นั้นเราจะใส่สิ่งต่อไปนี้:

sed "3d" distros-deb.txt > distros-deb-ok.txt

การอธิบายบรรทัดนี้ค่อนข้างง่ายด้วย กระหายน้ำ "3d" เรากำลังระบุว่าเราจะลบบรรทัด # 3 ด้วย distros-deb.txt เราระบุว่าจะใช้ไฟล์อะไรนั่นคือลบบรรทัด # 3 ของไฟล์นี้ถ้าเรากด Enter มัน จะแสดงสิ่งที่เราต้องการ แต่ในเทอร์มินัลดังนั้นด้วย > distros-deb-ok.txt เรากำลังระบุว่าแทนที่จะแสดงผลลัพธ์ในเทอร์มินัลให้ใส่ไว้ในไฟล์ที่มีชื่อนี้

อะไรง่ายๆ?

นอกจากนี้เราสามารถหลีกเลี่ยงการใช้ไฟล์ > distros-deb-ok.txt โดยใช้พารามิเตอร์ที่เหมาะสมของ ความกระหายน้ำพารามิเตอร์ -i

นั่นคือในกรณีที่เราต้องการลบบรรทัดออกจากไฟล์และบันทึกด้วยชื่อเดียวกัน (ไม่ใช่ในไฟล์อื่น) ให้เพิ่มพารามิเตอร์ -i :

sed -i "3d" distros-deb.txt

การดำเนินการนี้จะลบบรรทัด # 3 ออกจาก distros-deb.txt และบันทึก

จะเป็นอย่างไรถ้าฉันต้องการช่วงของบรรทัดนั่นคือการลบบรรทัด # 3 แต่ยังเป็น # 4 และ # 5 เพื่อให้บรรลุสิ่งนี้เราใส่ช่วงตั้งแต่ 3 ถึง 5 นั่นคือ:

sed -i "3,5d" distros-deb.txt

และมันจะแสดงให้ฉันเห็นเฉพาะ debian และ kubuntu 😀

แล้วถ้าฉันต้องการลบจากบรรทัดที่ 2 ไปยังบรรทัดสุดท้ายเมื่อฉันไม่ทราบจำนวนบรรทัดทั้งหมด?

เพียงใช้สัญลักษณ์ดอลลาร์ - » $

sed -i "2,$d" distros-deb.txt

ในกรณีที่คุณต้องการกำจัดจากบรรทัดแรกถึง # 4 เราก็ใส่ค่า 1 ที่จุดเริ่มต้น:

sed -i "1,4d" distros-deb.txt

นี่เป็นทุกอย่างเคล็ดลับที่มีประโยชน์มากเมื่อคุณต้องการสร้างสคริปต์ทุบตีเพื่อทำงานอัตโนมัติและคุณต้องแก้ไขและกำจัดบรรทัดของไฟล์การกำหนดค่าเพื่อแก้ไขเราสามารถใช้ได้ ความกระหายน้ำ o Perlเช่นเดียวกับการกำจัดเรารู้แล้วว่าต้องทำอย่างไรกับ sed 😉

ความนับถือ


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา

  1.   MSS DEVEL dijo

    ผลงานดีมาก😉

    1.    KZKG ^ กาอาระ dijo

      ขอขอบคุณ

      เราได้รับอีเมลของคุณแล้วตอนนี้ฉันจะตอบคุณ😀

      ความนับถือ

  2.   นิรนาม dijo

    ในฐานะมหาปุโรหิตของเทอร์มินัลเซิร์ฟเวอร์และการเชื่อมต่อ ssh ฉันมาหาคุณโอ้เยี่ยมมาก KZKG ^ Gaara และฉันถามคุณ: ฉันจะรับบทช่วยสอนในระดับความไม่รู้ของฉันได้ที่ไหนที่ช่วยให้ฉันใช้การเชื่อมต่อ ssh ระหว่างเครื่องระยะไกลสองเครื่องในเครือข่ายที่แตกต่างกันเพื่อแบ่งปัน ไฟล์ข้อความ pdf ภาพและเสียง (mp3) ….

    🙂

    อย่างจริงจังคุณช่วยแนะนำฉันในเรื่องนี้ฉันมีสองเครื่องเครื่องหนึ่งที่ทำงานและอีกเครื่องที่บ้านและฉันต้องการการเชื่อมต่อ ssh ระหว่างกัน (เพราะตามที่ฉันเข้าใจ ssh อนุญาตให้แชร์เนื้อหาระหว่างเครื่องได้ใช่ไหม)
    และถ้าฉันผิดคุณจะแนะนำแอปพลิเคชันใด
    และฉันจะหาบทช่วยสอนพื้นฐานในเรื่องนี้ได้ที่ไหน?

    1.    - สปีเกอร์ - dijo

      scp

      scp user @ machine_address: path user @ machine_address: path.

      ไวยากรณ์เดียวกับ cp ต้นทาง -> ปลายทาง

  3.   f3niX dijo

    คุณปรากฏตัวขึ้นคุณหลงทาง

  4.   Joaquin dijo

    เคล็ดลับดีๆ!

  5.   ไลคัสแฮคเกอร์อีโม dijo

    เคล็ดลับที่น่าสนใจ… xD

    โดยบังเอิญคุณไม่รู้จักคนที่ทำให้ข้อความตัวหนาโดดเด่น?
    ฉันหมายความว่าฉันมีไฟล์ txt ที่เป็นพจนานุกรมมันมีมากกว่า 10000 บรรทัดและฉันต้องการให้มันเน้นข้อความบางอย่างก่อนที่จุดระงับ ":" และทำทีละรายการมากเกินไป

    1.    KZKG ^ กาอาระ dijo

      สวัสดี

      ไฟล์ txt เป็นข้อความธรรมดาตามชื่อที่แสดงถึง ... ธรรมดาไม่มีรูปแบบหรืออะไรที่คล้ายกันฉันขอโทษ แต่ฉันไม่คิดว่าสิ่งที่คุณถามจะทำได้หรือไม่? 🙁

      ความนับถือ

      1.    ACA dijo

        ทำได้จริง แต่คุณต้องรู้รูปแบบปลายทาง
        เช่น:
        echo $ (echo "Robert: สวัสดีเปลี่ยนที่นี่" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
        มันเป็นเรื่องของการเดินทางโดย
        วิธีอื่นในการลบที่สามารถใช้ได้คือ sed '/' $ 1 '/ d' แต่คุณต้องแน่ใจว่า re

        1.    ไลคัสแฮคเกอร์อีโม dijo

          จากนั้นบันทึกใน * .odt

          ไม่มีวิธีที่ง่ายกว่าในการใช้ LibreOffice หรือไม่?

  6.   โลโล dijo

    คุณช่วยลบบางส่วนของบรรทัดและออกจากส่วนที่เหลือได้ไหม

    สมมติว่าฉันต้องการลบทุกอย่างที่อยู่หน้าคำในแถวหนึ่ง

    หรือลบทุกอย่างที่เป็นไปตามคำนั้น.

    1.    ACA dijo

      ใช่มันเป็นเรื่องของการดึงนิพจน์ทั่วไป (ถ้าจำเป็น man sed -r, –regexp-Extended)
      เริ่มต้นจากสิ่งที่ฉันพบ
      echo « Robert: สวัสดี เปลี่ยนที่นี่» | sed 's / เปลี่ยน //'
      ด้วยรูปแบบที่กำหนดไว้อย่างดีและด้วย (หนึ่งอักขระ) และ * (มากกว่าหนึ่งตัว)
      แล้ว:
      echo « Robert: สวัสดี เปลี่ยนที่นี่» | sed 's / เปลี่ยน. * //'
      ก่อน:
      echo « Robert: สวัสดี เปลี่ยนที่นี่» | sed 's /. * เปลี่ยน //'
      หากเป็นเรื่องสำคัญที่คำนั้นปรากฏ
      echo « Robert: สวัสดี เปลี่ยนที่นี่» | sed 's / เปลี่ยน. * / เปลี่ยน /'
      หรือซับซ้อนมากขึ้น
      ในบรรทัดที่มี Robert สิ่งที่เกิดขึ้นหลังจากการเปลี่ยนแปลง
      echo -e « Fritz: สวัสดี เปลี่ยนที่นี่ \ n โรเบิร์ต: สวัสดี เปลี่ยนที่นี่» | sed '/Robert/s/Cambio.*//'
      หรือเหมือนตอนเริ่มต้นให้ดึงบรรทัดที่สองออกแล้วประมวลผลส่วนที่เหลือ
      echo -e « Fritz: สวัสดี เปลี่ยนที่นี่ \ n โรเบิร์ต: สวัสดี เปลี่ยนที่นี่ \ n อื่น ๆ » | sed -e 2d -e 's / เปลี่ยน. * //'
      echo -e « Fritz: สวัสดี เปลี่ยนที่นี่ \ n โรเบิร์ต: สวัสดี เปลี่ยนที่นี่ \ n อื่น ๆ » | sed '2d; s / เปลี่ยน. * //'

      1.    โลโล dijo

        ขอบคุณมันมีประโยชน์มากสำหรับฉัน

  7.   MSX dijo

    บทความที่ดีที่ฉันชอบ SysAdmin ดีแค่ไหน!
    ชีวิตของเราจะเป็นอย่างไรหากปราศจาก Sed, awek, Perl, grep, tail, head, "Emacs" และเครื่องมือสำคัญอื่น ๆ อีกมากมาย!?

  8.   ลิสเบธ โอลลาร์เวส dijo

    ขอบคุณข้อมูลนี้มีประโยชน์มาก

  9.   แปร์นี dijo

    สวัสดีคุณจะลบบรรทัด 1,4 และ 10 ออกจากไฟล์ในคำสั่งเดียวกันได้อย่างไร?