สคริปต์และแพตเทิร์น sed ที่มีประโยชน์
(github.com)- แสดงเฉพาะ 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 ความคิดเห็น
เรื่องที่สามารถใช้อักขระอื่นนอกจากสแลชเป็นตัวคั่นได้นี่เป็นทิปที่จำเป็นมากจริง ๆ
เพราะเวลาจะเปลี่ยน URL ของ apt repository ก็มักจะต้องเจอกับกรณีที่มีสแลชอยู่บ่อยพอสมควร