<ก่อนหน้านี้ | Contents | ถัดไป>
ความกระหายน้ำ
ชื่อ ความกระหายน้ำ สั้นสำหรับ ตัวแก้ไขสตรีม. มันทำการแก้ไขข้อความในกระแสข้อความ ไม่ว่าจะเป็นชุดของไฟล์ที่ระบุหรืออินพุตมาตรฐาน ความกระหายน้ำ เป็นโปรแกรมที่ทรงพลังและค่อนข้างซับซ้อน (มีหนังสือเกี่ยวกับมันทั้งเล่ม) ดังนั้นเราจะไม่กล่าวถึงมันทั้งหมดที่นี่
โดยทั่วไปวิธีการ ความกระหายน้ำ การทำงานคือได้รับคำสั่งแก้ไขเดียว (บนบรรทัดคำสั่ง) หรือชื่อของไฟล์สคริปต์ที่มีคำสั่งหลายคำสั่ง จากนั้นดำเนินการคำสั่งเหล่านี้กับแต่ละบรรทัดในสตรีมข้อความ นี่เป็นตัวอย่างง่ายๆ ของ ความกระหายน้ำ ในการดำเนินการ:
[me@linuxbox ~]$ echo "ด้านหน้า" | s/หน้า/หลัง/'
กลับ
[me@linuxbox ~]$ echo "ด้านหน้า" | s/หน้า/หลัง/'
กลับ
ในตัวอย่างนี้ เราสร้างสตรีมข้อความหนึ่งคำโดยใช้เสียงสะท้อนและไพพ์ลงใน ความกระหายน้ำ. ความกระหายน้ำในที่สุดก็ปฏิบัติตามคำสั่ง ส/หน้า/หลัง/ บนข้อความในสตรีมและสร้างผลลัพธ์ "ย้อนกลับ" เป็นผลลัพธ์ นอกจากนี้เรายังสามารถรับรู้คำสั่งนี้เหมือนกับคำสั่ง "การแทนที่" (ค้นหาและแทนที่) ใน vi.
คำสั่งใน ความกระหายน้ำ ขึ้นต้นด้วยอักษรตัวเดียว ในตัวอย่างข้างต้น คำสั่งการแทนที่จะแสดงด้วยตัวอักษร s และตามด้วยสตริงการค้นหาและแทนที่ คั่นด้วยเครื่องหมายทับเป็นตัวคั่น การเลือกตัวคั่นเป็นแบบพลวัต ตามธรรมเนียมแล้ว อักขระสแลชมักใช้แต่ ความกระหายน้ำ จะยอมรับอักขระใดๆ ที่ตามหลังคำสั่งเป็นตัวคั่นทันที เราสามารถดำเนินการตามคำสั่งเดียวกันนี้:
[me@linuxbox ~]$ echo "ด้านหน้า" | sed 's_front_back_'
กลับ
[me@linuxbox ~]$ echo "ด้านหน้า" | sed 's_front_back_'
กลับ
โดยใช้อักขระขีดล่างทันทีหลังคำสั่ง อักขระนั้นจะกลายเป็นตัวคั่น ความสามารถในการตั้งค่าตัวคั่นสามารถใช้เพื่อทำให้คำสั่งอ่านง่ายขึ้น ดังที่เราจะเห็น
คำสั่งส่วนใหญ่ใน ความกระหายน้ำ อาจนำหน้าด้วย ที่อยู่ซึ่งระบุบรรทัดของอินพุตสตรีมที่จะแก้ไข หากไม่ระบุที่อยู่ คำสั่งแก้ไขคือ car-
ried ออกทุกบรรทัดในสตรีมอินพุต รูปแบบที่อยู่ที่ง่ายที่สุดคือหมายเลขบรรทัด เราสามารถเพิ่มหนึ่งในตัวอย่างของเรา:
[me@linuxbox ~]$ echo "ด้านหน้า" | '1s/หน้า/หลัง/'
กลับ
[me@linuxbox ~]$ echo "ด้านหน้า" | '1s/หน้า/หลัง/'
กลับ
กำลังเพิ่มที่อยู่ 1 คำสั่งของเราจะทำให้การแทนที่ของเราดำเนินการในบรรทัดแรกของสตรีมอินพุตบรรทัดเดียวของเรา หากเราระบุหมายเลขอื่น:
[me@linuxbox ~]$ echo "ด้านหน้า" | '2s/หน้า/หลัง/'
ด้านหน้า
[me@linuxbox ~]$ echo "ด้านหน้า" | '2s/หน้า/หลัง/'
ด้านหน้า
เราเห็นว่าการแก้ไขไม่ได้ดำเนินการ เนื่องจากสตรีมอินพุตของเราไม่มีบรรทัดที่ 2 ที่อยู่อาจแสดงได้หลายวิธี ต่อไปนี้คือสิ่งที่พบบ่อยที่สุด:
ตาราง 20-7: sed Address Notation
คำอธิบายที่อยู่
คำอธิบายที่อยู่
n หมายเลขบรรทัดที่ n เป็นจำนวนเต็มบวก
$ บรรทัดสุดท้าย
/regexp/ เส้นที่ตรงกับนิพจน์ทั่วไปพื้นฐาน POSIX โปรดทราบว่านิพจน์ทั่วไปคั่นด้วยเครื่องหมายทับ ทางเลือก นิพจน์ทั่วไปอาจถูกคั่นด้วยอักขระอื่น โดยการระบุนิพจน์ด้วย \cregexpcที่นี่มี c เป็นตัวละครสำรอง
แอดเดรส1,แอดเดรส2 ช่วงสายจาก แอดเดรส1 ไปยัง แอดเดรส2รวม. ที่อยู่อาจเป็นรูปแบบที่อยู่เดียวข้างต้น
เป็นครั้งแรก~ขั้นตอน จับคู่บรรทัดที่แสดงโดยตัวเลข เป็นครั้งแรกแล้วแต่ละบรรทัดต่อมาที่ ขั้นตอน ช่วงเวลา ตัวอย่างเช่น 1~2 หมายถึงแต่ละบรรทัดที่มีเลขคี่ 5~5 หมายถึงบรรทัดที่ห้าและทุกบรรทัดที่ห้าหลังจากนั้น
แอดเดรส1,+น การจับคู่ แอดเดรส1 และต่อไปนี้ n เส้น
addr! ตรงกันทุกบรรทัด ยกเว้น addrซึ่งอาจจะเป็นรูปแบบใดรูปแบบหนึ่งข้างต้น
เราจะสาธิตที่อยู่ประเภทต่างๆ โดยใช้ distros.txt ไฟล์จากเมื่อก่อน
ในบทนี้. ขั้นแรก ช่วงของหมายเลขบรรทัด:
[me@linuxbox ~]$ sed -n '1,5p' distros.txt
SUSE 10.2 12/07/2006
Fedora 10 11/25/2008
SUSE 11.0 06/19/2008
อูบุนตู 8.04 04/24/2008
Fedora 8 11/08/2007
ในตัวอย่างนี้ เราพิมพ์ช่วงของบรรทัด โดยเริ่มจากบรรทัดที่ 1 และต่อไปยังบรรทัดที่ 5 เมื่อต้องการทำเช่นนี้ เราใช้ p คำสั่งซึ่งทำให้มีการพิมพ์บรรทัดที่ตรงกัน เพื่อให้สิ่งนี้มีประสิทธิภาพ เราต้องรวมตัวเลือก -n (ตัวเลือกไม่มีการพิมพ์อัตโนมัติ) ที่จะทำให้เกิด ความกระหายน้ำ ไม่พิมพ์ทุกบรรทัดตามค่าเริ่มต้น
ต่อไป เราจะลองใช้นิพจน์ทั่วไป:
[me@linuxbox ~]$ | sed -n '/SUSE/p' distros.txt |
ซูเซ่ 10.2 | 12/07/2006 |
ซูเซ่ 11.0 | 06/19/2008 |
ซูเซ่ 10.3 | 10/04/2007 |
ซูเซ่ 10.1 | 05/11/2006 |
โดยการใส่นิพจน์ทั่วไปที่คั่นด้วยเครื่องหมายทับ /ซูส/, เราสามารถแยกบรรทัดที่มีมันในลักษณะเดียวกับ grep.
สุดท้าย เราจะลองปฏิเสธโดยเพิ่มเครื่องหมายอัศเจรีย์ (!) ไปยังที่อยู่:
[me@linuxbox ~]$ | sed -n '/SUSE/!p' distros.txt |
Fedora 10 | 11/25/2008 |
อูบุนตู 8.04 | 04/24/2008 |
Fedora 8 | 11/08/2007 |
อูบุนตู 6.10 | 10/26/2006 |
Fedora 7 | 05/31/2007 |
อูบุนตู 7.10 | 10/18/2007 |
อูบุนตู 7.04 | 04/19/2007 |
Fedora 6 | 10/24/2006 |
Fedora 9 | 05/13/2008 |
อูบุนตู 6.06 | 06/01/2006 |
อูบุนตู 8.10 | 10/30/2008 |
Fedora 5 | 03/20/2006 |
ที่นี่เราเห็นผลลัพธ์ที่คาดหวัง: ทุกบรรทัดในไฟล์ยกเว้นบรรทัดที่ตรงกับ
การแสดงออกปกติ
จนถึงตอนนี้ เราได้ดูสองรายการของ ความกระหายน้ำ แก้ไขคำสั่ง s และ p. ต่อไปนี้คือรายการคำสั่งแก้ไขพื้นฐานที่สมบูรณ์ยิ่งขึ้น:
ตาราง 20-8: sed Basic Editing Commands
คำอธิบายคำสั่ง
คำอธิบายคำสั่ง
= หมายเลขบรรทัดปัจจุบันของเอาต์พุต
a ต่อท้ายบรรทัดปัจจุบัน
d ลบบรรทัดปัจจุบัน
i แทรกข้อความหน้าบรรทัดปัจจุบัน
p พิมพ์บรรทัดปัจจุบัน โดยค่าเริ่มต้น sed จะพิมพ์ทุกบรรทัดและแก้ไขเฉพาะบรรทัดที่ตรงกับที่อยู่ที่ระบุภายในไฟล์ พฤติกรรมเริ่มต้นสามารถแทนที่ได้โดยการระบุตัวเลือก -n
q ทางออก ความกระหายน้ำ โดยไม่ต้องประมวลผลบรรทัดใด ๆ อีกต่อไป ถ้า
ไม่ได้ระบุตัวเลือก -n ให้ส่งออกบรรทัดปัจจุบัน
Q ทางออก ความกระหายน้ำ โดยไม่ต้องประมวลผลบรรทัดใด ๆ อีกต่อไป
s/regexp/การแทนที่/ แทนที่เนื้อหาของ การแทนที่ ที่ไหนก็ตาม
regexp พบ การแทนที่ อาจรวมถึงอักขระพิเศษ &ซึ่งเทียบเท่ากับข้อความที่จับคู่โดย regexp. นอกจากนี้, การแทนที่ อาจรวมถึงลำดับ \1 ตลอด \9ซึ่งเป็นเนื้อหาของนิพจน์ย่อยที่เกี่ยวข้องใน regexp. สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ ดูการสนทนาของ การอ้างอิงกลับ ด้านล่าง. หลังจากเครื่องหมายทับตามหลัง การแทนที่, อาจระบุแฟล็กทางเลือกเพื่อแก้ไข s พฤติกรรมของคำสั่ง
y/set1/set2 ทำการทับศัพท์โดยแปลงอักขระจาก set1 กับอักขระที่สอดคล้องกันใน set2. โปรดทราบว่าไม่เหมือน tr, ความกระหายน้ำ กำหนดให้ทั้งสองชุดมีความยาวเท่ากัน
การขอ s คำสั่งเป็นคำสั่งแก้ไขที่ใช้บ่อยที่สุด เราจะสาธิตพลังเพียงบางส่วนโดยดำเนินการแก้ไขบน .ของเรา distros.txt ไฟล์. เราคุยกันก่อนว่าช่องวันที่ใน distros.txt ไม่ได้อยู่ใน "คอมพิวเตอร์ที่เป็นมิตร" สำหรับ-
เสื่อ. แม้ว่าวันที่จะมีรูปแบบเป็น MM/DD/YYYY มันจะดีกว่า (เพื่อความสะดวกในการจัดเรียง) หากรูปแบบเป็น YYYY-MM-DD ในการดำเนินการเปลี่ยนแปลงนี้กับไฟล์ด้วยมือจะใช้เวลานานและเกิดข้อผิดพลาดได้ง่าย แต่ด้วย ความกระหายน้ำการเปลี่ยนแปลงนี้สามารถทำได้ในขั้นตอนเดียว:
[me@linuxbox ~]$ sed 's/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\
)$/\3-\1-\2/' distros.txt
ซูส 10.2 2006-12-07
เฟโดรา 10 2008-11-25
ซูส 11.0 2008-06-19
อูบุนตู 8.04 2008-04-24
เฟโดรา 8 2007-11-08
ซูส 10.3 2007-10-04
อูบุนตู 6.10 2006-10-26
เฟโดรา 7 2007-05-31
อูบุนตู 7.10 2007-10-18
อูบุนตู 7.04 2007-04-19
ซูส 10.1 2006-05-11
เฟโดรา 6 2006-10-24
เฟโดรา 9 2008-05-13
อูบุนตู 6.06 2006-06-01
อูบุนตู 8.10 2008-10-30
เฟโดรา 5 2006-03-20
ว้าว! ตอนนี้เป็นคำสั่งที่ดูน่าเกลียด แต่มันได้ผล ในขั้นตอนเดียว เราได้เปลี่ยนรูปแบบวันที่ในไฟล์ของเรา นอกจากนี้ยังเป็นตัวอย่างที่สมบูรณ์แบบที่อธิบายว่าเหตุใดนิพจน์ทั่วไปจึงถูกเรียกติดตลกว่าเป็นสื่อ "เขียนอย่างเดียว" ในบางครั้ง เราสามารถเขียนได้ แต่บางครั้งเราไม่สามารถอ่านได้ ก่อนที่เราจะวิ่งหนีด้วยความหวาดกลัวจากคำสั่งนี้ เรามาดูกันว่ามันถูกสร้างขึ้นมาอย่างไร อันดับแรก เรารู้ว่าคำสั่งจะมีโครงสร้างพื้นฐานนี้:
sed ของ /regexp/การแทนที่/' distros.txt
sed ของ /regexp/การแทนที่/' distros.txt
ขั้นตอนต่อไปของเราคือการหานิพจน์ทั่วไปที่จะแยกวันที่ เนื่องจากอยู่ในรูปแบบ MM/DD/YYYY และปรากฏที่ท้ายบรรทัด เราจึงสามารถใช้นิพจน์ดังนี้:
[0-9]{2}/[0-9]{2}/[0-9]{4}$
[0-9]{2}/[0-9]{2}/[0-9]{4}$
ซึ่งตรงกับตัวเลขสองหลัก เครื่องหมายทับ สองหลัก เครื่องหมายทับ สี่หลัก และท้ายบรรทัด ที่จะดูแล regexpแต่สิ่งที่เกี่ยวกับ การแทนที่? เราต้องมาแนะนำ
คุณลักษณะนิพจน์ทั่วไปใหม่ที่ปรากฏในบางแอปพลิเคชันที่ใช้ BRE คุณลักษณะนี้เรียกว่า การอ้างอิงกลับ และทำงานดังนี้: ถ้าลำดับ \n ปรากฏใน ตำแหน่งใหม่ ที่ไหน n เป็นตัวเลขตั้งแต่ 1 ถึง 9 ลำดับจะอ้างถึงนิพจน์ย่อยที่สอดคล้องกันในนิพจน์ทั่วไปก่อนหน้า ในการสร้างนิพจน์ย่อย เราเพียงแค่ใส่ไว้ในวงเล็บดังนี้:
([0-9]{2})/([0-9]{2})/([0-9]{4})$
([0-9]{2})/([0-9]{2})/([0-9]{4})$
ตอนนี้เรามีนิพจน์ย่อยสามนิพจน์ อันแรกประกอบด้วยเดือน อันที่สองประกอบด้วยวันของเดือน และอันที่สามประกอบด้วยปี ตอนนี้เราสามารถสร้างได้ การแทนที่ ดังต่อไปนี้:
\3-\1-\2
\3-\1-\2
ซึ่งให้ปี ขีดกลาง เดือน ขีดกลาง และวันแก่เรา ตอนนี้คำสั่งของเรามีลักษณะดังนี้:
sed 's/([0-9]{2})/([0-9]{2})/([0-9]{4})$/\3-\1-\2/' distros.txt
sed 's/([0-9]{2})/([0-9]{2})/([0-9]{4})$/\3-\1-\2/' distros.txt
เรามีสองปัญหาที่เหลืออยู่ อย่างแรกคือเครื่องหมายทับพิเศษในนิพจน์ปกติของเราจะสับสน ความกระหายน้ำ เมื่อมันพยายามตีความ s สั่งการ. ประการที่สองคือตั้งแต่ ความกระหายน้ำโดยค่าเริ่มต้น ยอมรับเฉพาะนิพจน์ทั่วไปพื้นฐาน อักขระหลายตัวในนิพจน์ทั่วไปของเราจะถูกใช้เป็นตัวอักษร แทนที่จะเป็นอักขระเมตา เราสามารถแก้ปัญหาทั้งสองนี้ได้โดยใช้แบ็กสแลชแบบเสรีนิยมเพื่อหลีกหนีจากอักขระที่ละเมิด:
sed 's/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/' dis tros.txt
sed 's/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/' dis tros.txt
และคุณมีมัน!
คุณสมบัติอีกประการหนึ่งของไฟล์ s คำสั่งคือการใช้แฟล็กทางเลือกที่อาจตามหลังสตริงการจัดตำแหน่ง ที่สำคัญที่สุดคือ g ธงซึ่งสั่ง ความกระหายน้ำ เพื่อใช้การค้นหาและแทนที่ทั่วโลกกับบรรทัด ไม่ใช่แค่กับอินสแตนซ์แรก ซึ่งเป็นค่าเริ่มต้น นี่คือตัวอย่าง:
[me@linuxbox ~]$ echo "aaabbbccc" | sed 's/b/B/'
อ่าาาBbbccc
[me@linuxbox ~]$ echo "aaabbbccc" | sed 's/b/B/'
อ่าาาBbbccc
เราเห็นว่ามีการแทนที่ แต่สำหรับตัวอย่างแรกของตัวอักษร "b" ในขณะที่ส่วนที่เหลือจะไม่เปลี่ยนแปลง โดยการเพิ่ม g ธง เราสามารถเปลี่ยนอินสแตนซ์ทั้งหมดได้:
[me@linuxbox ~]$ echo "aaabbbccc" | sed 's/b/B/g'
อ๊ากกก
[me@linuxbox ~]$ echo "aaabbbccc" | sed 's/b/B/g'
อ๊ากกก
จนถึงตอนนี้เรามีแต่ให้ ความกระหายน้ำ คำสั่งเดียวผ่านบรรทัดคำสั่ง นอกจากนี้ยังเป็นไปได้ที่จะสร้างคำสั่งที่ซับซ้อนมากขึ้นในไฟล์สคริปต์โดยใช้ -f ตัวเลือก. เพื่อสาธิต เราจะใช้ ความกระหายน้ำ กับเรา distros.txt ไฟล์เพื่อสร้างรายงาน รายงานของเราจะแสดงชื่อเรื่องที่ด้านบน วันที่แก้ไข และชื่อการแจกจ่ายทั้งหมดที่แปลงเป็นตัวพิมพ์ใหญ่ ในการดำเนินการนี้ เราจะต้องเขียนสคริปต์ ดังนั้นเราจะเปิดโปรแกรมแก้ไขข้อความของเราและป้อนข้อมูลต่อไปนี้:
# sed script เพื่อสร้างรายงานการแจกแจงลินุกซ์
1 ผม\
\
รายงานการกระจาย Linux\
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/ y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
# sed script เพื่อสร้างรายงานการแจกแจงลินุกซ์
1 ผม\
\
รายงานการกระจาย Linux\
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/ y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
พวกเราจะรอด ความกระหายน้ำ สคริปต์เป็น distros.sed และเรียกใช้ดังนี้:
[me@linuxbox ~]$ sed -f distros.sed distros.txt
รายงานการกระจาย Linux
SUSE | 10.2 | 2006-12-07 |
เฟโดรา | 10 | 2008-11-25 |
SUSE | 11.0 | 2008-06-19 |
UBUNTU | 8.04 | 2008-04-24 |
เฟโดรา | 8 | 2007-11-08 |
SUSE | 10.3 | 2007-10-04 |
UBUNTU | 6.10 | 2006-10-26 |
เฟโดรา | 7 | 2007-05-31 |
UBUNTU | 7.10 | 2007-10-18 |
UBUNTU | 7.04 | 2007-04-19 |
SUSE | 10.1 | 2006-05-11 |
เฟโดรา | 6 | 2006-10-24 |
เฟโดรา | 9 | 2008-05-13 |
UBUNTU | 6.06 | 2006-06-01 |
UBUNTU | 8.10 | 2008-10-30 |
เฟโดรา | 5 | 2006-03-20 |
# sed script เพื่อสร้างรายงานการแจกแจงลินุกซ์
# sed script เพื่อสร้างรายงานการแจกแจงลินุกซ์
อย่างที่เราเห็น สคริปต์ของเราให้ผลลัพธ์ที่ต้องการ แต่มันทำได้อย่างไร? มาดูสคริปต์ของเรากันอีกครั้ง เราจะใช้ แมว เพื่อกำหนดหมายเลขบรรทัด:
[me@linuxbox ~]$ cat -n distros.sed
[me@linuxbox ~]$ cat -n distros.sed
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
1 ผม\
\
รายงานการกระจาย Linux\
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/ y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
1 ผม\
\
รายงานการกระจาย Linux\
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/ y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
บรรทัดหนึ่งของสคริปต์ของเราคือ a ความเห็น. เช่นเดียวกับไฟล์คอนฟิกูเรชันและภาษาการเขียนโปรแกรมบนระบบ Linux ความคิดเห็นเริ่มต้นด้วย # และตามด้วยข้อความที่มนุษย์สามารถอ่านได้ ความคิดเห็นสามารถวางไว้ที่ใดก็ได้ในสคริปต์ (แต่ไม่อยู่ในคำสั่งเอง) และเป็นประโยชน์กับมนุษย์ที่อาจจำเป็นต้องระบุและ/หรือบำรุงรักษาสคริปต์
บรรทัดที่ 2 เป็นบรรทัดว่าง เช่นเดียวกับความคิดเห็น อาจมีการเพิ่มบรรทัดว่างเพื่อให้อ่านง่ายขึ้น
หลาย ความกระหายน้ำ คำสั่งสนับสนุนที่อยู่บรรทัด สิ่งเหล่านี้ใช้เพื่อระบุว่าจะต้องดำเนินการกับบรรทัดใด ที่อยู่บรรทัดอาจแสดงเป็นหมายเลขบรรทัดเดียว ช่วงหมายเลขบรรทัด และหมายเลขบรรทัดพิเศษ “$” ซึ่งระบุบรรทัดสุดท้ายของอินพุต
บรรทัดที่ 3 ถึง 6 มีข้อความที่จะแทรกตามที่อยู่ 1 ซึ่งเป็นบรรทัดแรกของการป้อนข้อมูล NS i คำสั่งตามด้วยลำดับ backslash-carriage return เพื่อสร้าง carriage return หรือสิ่งที่เรียกว่า อักขระต่อเนื่องของบรรทัด. ลำดับนี้ ซึ่งสามารถใช้ได้ในหลายสถานการณ์รวมถึงเชลล์สคริปต์ อนุญาตให้มีการส่งคืนการขึ้นบรรทัดใหม่ในสตรีมข้อความโดยไม่ต้องส่งสัญญาณล่าม (ในกรณีนี้ ความกระหายน้ำ) ว่าถึงจุดสิ้นสุดของบรรทัดแล้ว NS iและในทำนองเดียวกัน a (ซึ่งต่อท้ายข้อความแทนที่จะแทรก) และ c (ซึ่งแทนที่ข้อความ) คำสั่ง อนุญาตข้อความหลายบรรทัดตราบใดที่แต่ละบรรทัด ยกเว้นบรรทัดสุดท้าย ลงท้ายด้วยอักขระต่อเนื่องของบรรทัด บรรทัดที่หกของสคริปต์ของเราจริง ๆ แล้วคือจุดสิ้นสุดของข้อความที่แทรกของเราและลงท้ายด้วยการขึ้นบรรทัดใหม่แบบธรรมดาแทนที่จะเป็นอักขระต่อเนื่องของบรรทัดซึ่งเป็นสัญญาณของการสิ้นสุดของ i คำสั่ง
หมายเหตุ: อักขระต่อเนื่องของบรรทัดประกอบด้วยแบ็กสแลชที่ตามมา ทันที
โดยการคืนรถ ไม่อนุญาตให้มีช่องว่างตัวกลาง
บรรทัดที่ 7 คือคำสั่งค้นหาและแทนที่ของเรา เนื่องจากไม่มีที่อยู่นำหน้า แต่ละบรรทัดในสตรีมอินพุตจึงขึ้นอยู่กับการดำเนินการ
บรรทัดที่ 8 ทำการทับศัพท์ของตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่ สังเกตว่าไม่เหมือน trที่ y คำสั่งใน ความกระหายน้ำ ไม่รองรับช่วงอักขระ (เช่น [a-z]) และไม่รองรับคลาสอักขระ POSIX อีกครั้งตั้งแต่ y คำสั่งไม่ได้นำหน้าด้วยที่อยู่ แต่จะใช้กับทุกบรรทัดในสตรีมอินพุต
คนชอบเซดก็ไลค์...
sed เป็นโปรแกรมที่มีความสามารถมาก สามารถทำงานแก้ไขที่ค่อนข้างซับซ้อนให้กับสตรีมข้อความได้ มักใช้สำหรับงานง่ายๆ ในบรรทัดเดียว แทนที่จะเป็นสคริปต์แบบยาว ผู้ใช้หลายคนชอบเครื่องมืออื่นๆ สำหรับงานที่ใหญ่กว่า ที่นิยมมากที่สุดคือ awk และ Perl สิ่งเหล่านี้เป็นมากกว่าเครื่องมืออย่างโปรแกรมที่ครอบคลุมที่นี่ และขยายไปสู่ขอบเขตของภาษาการเขียนโปรแกรมที่สมบูรณ์ โดยเฉพาะอย่างยิ่ง Perl มักใช้แทนเชลล์สคริปต์สำหรับงานด้านการจัดการและดูแลระบบจำนวนมาก รวมทั้งเป็นสื่อกลางที่ได้รับความนิยมอย่างมากสำหรับการพัฒนาเว็บ awk เชี่ยวชาญกว่าเล็กน้อย จุดแข็งเฉพาะคือความสามารถในการจัดการข้อมูลแบบตาราง มันคล้ายกับ sed ในโปรแกรม awk ที่ปกติแล้วจะประมวลผลไฟล์ข้อความทีละบรรทัด โดยใช้โครงร่างที่คล้ายกับแนวคิด sed ของที่อยู่ตามด้วยการกระทำ แม้ว่า awk และ Perl จะอยู่นอกขอบเขตของหนังสือเล่มนี้ แต่ก็เป็นทักษะที่ดีมากสำหรับผู้ใช้บรรทัดคำสั่ง Linux ในการเรียนรู้