สิ่งนี้จะกลับรายการไฟล์ทีละบรรทัด
sed '1! G; h; $! d' ไฟล์
ครั้งแรกที่sed
มีพื้นที่ถือและพื้นที่รูปแบบ เราต้องแยกแยะความแตกต่างระหว่างพวกเขาก่อนที่จะมุ่งเน้นไปที่คำสั่งเฉพาะนั้น
เมื่อsed
อ่านบรรทัดใหม่มันจะถูกโหลดในพื้นที่รูปแบบ ดังนั้นพื้นที่นั้นจะถูกเขียนทับทุกครั้งที่มีการประมวลผลบรรทัดใหม่ ในทางตรงกันข้ามพื้นที่พักมีความสอดคล้องมากกว่าการประมวลผลทั้งหมดและค่าที่สามารถเก็บไว้ที่นั่นสำหรับการใช้งานในภายหลัง
ไปที่คำสั่ง:
มี 3 คำสั่งในการแถลงครั้งนี้มี1!G
, h
และ$!d
1!G
หมายถึงว่าG
คำสั่งจะถูกดำเนินการในบรรทัดยกเว้นคนแรกที่ทุกคน (คน!
ขัดแย้ง1
) G
หมายถึงการผนวกสิ่งที่อยู่ในพื้นที่พักไว้ในพื้นที่รูปแบบ
h
ใช้กับทุกบรรทัด มันจะคัดลอกพื้นที่รูปแบบไปยังพื้นที่พัก (และเขียนทับมัน)
$!d
ใช้กับทุกบรรทัดยกเว้นบรรทัดสุดท้าย ( $
แทนบรรทัดสุดท้าย, !
คัดค้าน) d
เป็นคำสั่งเพื่อลบบรรทัด (พื้นที่รูปแบบ)
- ตอนนี้เมื่ออ่านบรรทัดแรกแล้วให้
sed
เรียกใช้งานh
คำสั่ง บรรทัดแรกจะถูกคัดลอกไปยังพื้นที่พัก จากนั้นจะถูกลบเนื่องจากตรงกับ$!
เงื่อนไข sed
ดำเนินการต่อด้วยบรรทัดที่สอง
- บรรทัดที่สองตรงกับเงื่อนไข
1!
(ไม่ใช่บรรทัดแรก) ดังนั้นพื้นที่พัก (ซึ่งมีบรรทัดแรก) จะถูกผนวกเข้ากับพื้นที่รูปแบบ (ซึ่งมีบรรทัดที่สอง) หลังจากนั้นในพื้นที่รูปแบบขณะนี้มีบรรทัดที่สองตามด้วยบรรทัดแรกคั่นด้วยบรรทัดใหม่ ตอนนี้h
คำสั่งใช้ (เหมือนในทุกบรรทัด); ทั้งหมดที่อยู่ในพื้นที่รูปแบบจะถูกคัดลอกไปยังพื้นที่พัก คำสั่งที่สาม ( $!d
) ใช้: บรรทัดจะถูกลบออกจากพื้นที่รูปแบบ
- ขั้นตอนที่ 2 เสร็จแล้วกับทุกบรรทัด เราข้ามไปที่บรรทัดสุดท้าย
- ในบรรทัดสุดท้าย (
$
) เกือบทั้งหมดของขั้นตอนที่ 2 เสร็จสิ้น แต่ไม่ใช่ส่วนลบ ( d
) sed
เมื่อเรียกใช้โดยไม่-n
พิมพ์พื้นที่รูปแบบโดยอัตโนมัติเมื่อสิ้นสุดการประมวลผลสำหรับแต่ละบรรทัดอินพุต ดังนั้นเมื่อไม่ถูกลบพื้นที่รูปแบบจะถูกพิมพ์ ตอนนี้มันมีทุกบรรทัดในการสั่งซื้อที่ตรงกันข้าม