Trình chỉnh sửa luồng - Ký tự đặc biệt

SED cung cấp hai ký tự đặc biệt được coi là lệnh. Chương này minh họa cách sử dụng của hai ký tự đặc biệt này.

= Lệnh

Lệnh "=" xử lý số dòng. Dưới đây là cú pháp của lệnh "=":

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

Lệnh = ghi số dòng theo sau là nội dung của nó trên dòng đầu ra chuẩn. Ví dụ sau đây minh họa điều này.

[jerry]$ sed '=' books.txt

Khi thực thi đoạn mã trên, bạn nhận được kết quả sau:

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

Hãy để chúng tôi in số dòng và nội dung của bốn dòng đầu tiên. Lệnh sau sẽ in ra bốn dòng đầu tiên có số dòng và dòng còn lại không có số dòng.

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

Khi thực thi đoạn mã trên, bạn nhận được kết quả sau:

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

Ngoài ra, chúng tôi có thể hướng dẫn SED in số dòng khi khớp mẫu thành công. Ví dụ sau in số dòng có chứa mẫu "Paulo".

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

Khi thực thi đoạn mã trên, bạn nhận được kết quả sau:

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

Bạn có đoán được lệnh SED sau đây làm gì không?

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

Khi thực thi đoạn mã trên, bạn nhận được kết quả sau:

6

Vâng, bạn đã đúng. Nó đếm tổng số dòng có trong tệp. Hãy để chúng tôi làm sáng tỏ mã. Trong phần lệnh, chúng tôi sử dụng "$ =" để in số dòng của dòng cuối cùng theo sau là nội dung của nó. Nhưng chúng tôi cũng cung cấp-n cờ ngăn chặn việc in mặc định của bộ đệm mẫu. Do đó, chỉ số dòng cuối cùng được hiển thị.

& Chỉ huy

SED hỗ trợ ký tự đặc biệt &. Bất cứ khi nào khớp mẫu thành công, ký tự đặc biệt này sẽ lưu trữ mẫu đã khớp. Nó thường được sử dụng với lệnh thay thế. Hãy để chúng tôi xem cách chúng tôi có thể tận dụng tính năng hiệu quả này.

Mỗi dòng trong tệp book.txt được đánh số. Hãy để chúng tôi thêm các từBook numberở đầu mỗi dòng. Ví dụ sau đây minh họa điều này.

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

Khi thực thi đoạn mã trên, bạn nhận được kết quả sau:

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

Ví dụ này rất đơn giản. Đầu tiên, chúng tôi tìm kiếm lần xuất hiện đầu tiên của một chữ số, đó là số dòng (đó là lý do tại sao chúng tôi sử dụng [[: digit:]]) và SED tự động lưu mẫu phù hợp trong ký tự đặc biệt &. Trong bước thứ hai, chúng tôi chèn các từBook number trước mỗi mẫu phù hợp, tức là trước mỗi dòng.

Hãy để chúng tôi lấy một ví dụ khác. Trong tệp book.txt, chữ số cuối cùng ngụ ý số trang của cuốn sách. Hãy để chúng tôi thêm "Pages =" trước đó. Để thực hiện việc này, hãy tìm lần xuất hiện cuối cùng của chữ số và thay thế nó bằng "Pages = &". Tại đây, & lưu trữ mẫu phù hợp, tức là số trang

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

Khi thực hiện cú pháp trên, bạn nhận được kết quả sau:

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

Hiện tại, chỉ cần nhớ rằng [[:digit:]]*$tìm lần xuất hiện cuối cùng của chữ số. Trong chương “Biểu thức chính quy, chúng ta sẽ khám phá thêm về biểu thức chính quy.