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.