28 คะแนน โดย xguru 2021-11-15 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • แสดงเฉพาะ 1 บรรทัด

→ sed -n '10p' file.txt

  • แทนที่อักขระในทุกบรรทัด ยกเว้นบรรทัดที่ 5

→ sed '5!/s/foo/bar/' file.txt

  • แทนที่ด้วย regex ในทุกบรรทัดที่ขึ้นต้นด้วยอักขระที่กำหนด

→ sed '/^hello/ s/h/H/' file.txt

  • แทนที่เฉพาะตั้งแต่บรรทัดที่ 5 จนถึงบรรทัดสุดท้าย

→ sed '5,$ s/foo/bar/' file.txt

  • ลบไฟล์ว่าง

→ sed '/^$/d' file

  • แสดงทุกบรรทัดระหว่าง regex สองตัว

→ sed -nE '/^foo/,/^bar/p' file.txt

  • ใช้ delimiter แบบกำหนดเองเพื่อให้ค้นหาข้อความที่มี slash ได้ง่ายขึ้น

→ sed 's_/bin/bash_/bin/sh_' file.txt

  • ลบสตริงซ้ำที่คั่นด้วยช่องว่าง (ยกเว้นกรณีซ้ำสามครั้ง)

→ sed -E 's_([a-zA-Z0-9_]+) \1_\1_ig' f1

  • ค้นหาแพตเทิร์นที่ต้องการแล้วเปลี่ยน จากนั้นบันทึกเฉพาะรายการที่ถูกแก้ไขลงไฟล์อื่น

→ sed 's_foo_bar_w replaced.txt' file.txt

  • แทนที่หลายรายการพร้อมกัน

→ sed -e 's_foo_bar_' -e 's_hello_HELLO_' file.txt

  • ลบคอมเมนต์ทั้งหมดระหว่างคีย์เวิร์ดสองตัวแล้วแทรกบรรทัดว่าง

→ sed -E '/start/,/end/ s/#.*//' file.txt

  • ลบคอมเมนต์ทั้งหมดที่ขึ้นต้นด้วย #

→ sed -E '/^#/d' f1

  • แสดงผลจนกว่าจะพบแพตเทิร์นที่กำหนด

→ sed '/start/q' file.txt

  • แทรกไฟล์หลังบรรทัดที่กำหนด

→ sed '5 r newfile.txt' file.txt

  • เพิ่มข้อความในบรรทัดถัดจากบรรทัดที่ตรงกับ regex ที่กำหนด

→ sed '/foo/a\AFTER FOO' file.txt

  • แทนที่บรรทัดที่ตรงกับ regex ที่กำหนด

→ sed '/foo/c\FOO IS CHANGED' file.txt

  • บันทึกคอมเมนต์ทั้งหมดที่ขึ้นต้นด้วย # ลงไฟล์อื่น

→ sed -E '/^#/w comments.txt' file.txt

  • แสดงทุกบรรทัดที่สองเท่านั้น (ข้ามหนึ่งบรรทัดแล้วแสดงหนึ่งบรรทัด; ปรับเป็น 3/4 ได้เช่นกัน)

→ sed -n '1~2p' file.txt

  • แก้ไขไฟล์โดยตรงพร้อมสร้างไฟล์สำรองไว้ด้วย

→ sed -i.bak 's/hello/HELLO/' file.txt

  • เพิ่มบรรทัดว่าง 2 บรรทัดหลังจาก regex ที่ตรงกัน

→ sed -E '/^#/G G' file.txt

1 ความคิดเห็น

 
tribela 2021-11-15

เรื่องที่สามารถใช้อักขระอื่นนอกจากสแลชเป็นตัวคั่นได้นี่เป็นทิปที่จำเป็นมากจริง ๆ

เพราะเวลาจะเปลี่ยน URL ของ apt repository ก็มักจะต้องเจอกับกรณีที่มีสแลชอยู่บ่อยพอสมควร