ตัวแก้ไขสตรีม - อักขระพิเศษ

SED มีอักขระพิเศษสองตัวซึ่งถือว่าเป็นคำสั่ง บทนี้แสดงให้เห็นถึงการใช้อักขระพิเศษทั้งสองนี้

= คำสั่ง

คำสั่ง "=" เกี่ยวข้องกับหมายเลขบรรทัด ให้ด้านล่างนี้คือไวยากรณ์ของคำสั่ง "=":

[/pattern/]= 
[address1[,address2]]=

คำสั่ง = เขียนหมายเลขบรรทัดตามด้วยเนื้อหาบนสตรีมเอาต์พุตมาตรฐาน ตัวอย่างต่อไปนี้แสดงให้เห็นถึงสิ่งนี้

[jerry]$ sed '=' books.txt

ในการรันโค้ดด้านบนคุณจะได้ผลลัพธ์ดังต่อไปนี้:

1 
1) A Storm of Swords, George R. R. Martin, 1216 
2 
2) The Two Towers, J. R. R. Tolkien, 352 
3 
3) The Alchemist, Paulo Coelho, 197 
4 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5 
5) The Pilgrimage, Paulo Coelho, 288 
6 
6) A Game of Thrones, George R. R. Martin, 864

ให้เราพิมพ์หมายเลขบรรทัดและเนื้อหาของสี่บรรทัดแรก คำสั่งต่อไปนี้พิมพ์สี่บรรทัดแรกพร้อมหมายเลขบรรทัดและที่เหลือโดยไม่มีหมายเลขบรรทัด

[jerry]$ sed '1, 4=' books.txt

ในการรันโค้ดด้านบนคุณจะได้ผลลัพธ์ดังต่อไปนี้:

1 
1) A Storm of Swords, George R. R. Martin, 1216 
2 
2) The Two Towers, J. R. R. Tolkien, 352 
3 
3) The Alchemist, Paulo Coelho, 197 
4 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

นอกจากนี้เราสามารถสั่งให้ SED พิมพ์หมายเลขบรรทัดเมื่อการจับคู่รูปแบบสำเร็จ ตัวอย่างต่อไปนี้จะพิมพ์หมายเลขบรรทัดที่มีรูปแบบ "Paulo"

[jerry]$ sed '/Paulo/ =' books.txt

ในการรันโค้ดด้านบนคุณจะได้ผลลัพธ์ดังต่อไปนี้:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

คุณเดาได้ไหมว่าคำสั่ง SED ต่อไปนี้ทำอะไร?

[jerry]$ sed -n '$ =' books.txt

ในการรันโค้ดด้านบนคุณจะได้ผลลัพธ์ดังต่อไปนี้:

6

ใช่คุณถูก. นับจำนวนบรรทัดทั้งหมดที่มีอยู่ในไฟล์ ให้เราเข้าใจรหัส ในส่วนคำสั่งเราใช้ "$ =" ซึ่งพิมพ์หมายเลขบรรทัดของบรรทัดสุดท้ายตามด้วยเนื้อหา แต่เรายังให้ไฟล์-n แฟล็กซึ่งระงับการพิมพ์เริ่มต้นของบัฟเฟอร์รูปแบบ ดังนั้นจะแสดงเฉพาะหมายเลขบรรทัดสุดท้ายเท่านั้น

& คำสั่ง

SED รองรับตัวละครพิเศษ &. เมื่อใดก็ตามที่การจับคู่รูปแบบสำเร็จอักขระพิเศษนี้จะจัดเก็บรูปแบบที่ตรงกัน มักใช้กับคำสั่งการแทนที่ มาดูกันว่าเราจะใช้ประโยชน์จากคุณลักษณะที่มีประสิทธิภาพนี้ได้อย่างไร

แต่ละบรรทัดในไฟล์ book.txt จะมีหมายเลขกำกับ ให้เราเพิ่มคำBook numberที่จุดเริ่มต้นของแต่ละบรรทัด ตัวอย่างต่อไปนี้แสดงให้เห็นถึงสิ่งนี้

[jerry]$ sed 's/[[:digit:]]/Book number &/' books.txt

ในการรันโค้ดด้านบนคุณจะได้ผลลัพธ์ดังต่อไปนี้:

Book number 1) A Storm of Swords, George R. R. Martin, 1216 
Book number 2) The Two Towers, J. R. R. Tolkien, 352 
Book number 3) The Alchemist, Paulo Coelho, 197 
Book number 4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
Book number 5) The Pilgrimage, Paulo Coelho, 288 
Book number 6) A Game of Thrones, George R. R. Martin, 864

ตัวอย่างนี้ง่ายมาก อันดับแรกเราค้นหาตัวเลขที่เกิดขึ้นครั้งแรกซึ่งก็คือหมายเลขบรรทัด (นั่นคือเหตุผลที่เราใช้ [[: digit:]]) และ SED จะจัดเก็บรูปแบบที่ตรงกันโดยอัตโนมัติในอักขระพิเศษ & ในขั้นตอนที่สองเราแทรกคำBook number ก่อนแต่ละรูปแบบที่ตรงกันกล่าวคือก่อนทุกบรรทัด

ให้เราใช้ตัวอย่างอื่น ในไฟล์ book.txt ตัวเลขสุดท้ายหมายถึงจำนวนหน้าของหนังสือ ให้เราเพิ่ม "Pages =" ก่อนหน้านั้น ในการดำเนินการนี้ให้ค้นหาตัวเลขสุดท้ายที่เกิดขึ้นและแทนที่ด้วย "Pages = &" ที่นี่ & จัดเก็บรูปแบบที่ตรงกันเช่นจำนวนหน้า

[jerry]$ sed 's/[[:digit:]]*$/Pages = &/' books.txt

ในการเรียกใช้ไวยากรณ์ข้างต้นคุณจะได้รับผลลัพธ์ดังต่อไปนี้:

1) A Storm of Swords, George R. R. Martin, Pages = 1216 
2) The Two Towers, J. R. R. Tolkien, Pages = 352 
3) The Alchemist, Paulo Coelho, Pages = 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, Pages = 432 
5) The Pilgrimage, Paulo Coelho,Pages = 288 
6) A Game of Thrones, George R. R. Martin, Pages = 864

ในขณะนี้โปรดจำไว้ว่า [[:digit:]]*$ค้นหาการเกิดครั้งสุดท้ายของตัวเลข ในบท "นิพจน์ทั่วไปเราจะสำรวจเพิ่มเติมเกี่ยวกับนิพจน์ทั่วไป