Trình chỉnh sửa luồng - Bộ đệm mẫu
Một trong những thao tác cơ bản mà chúng tôi thực hiện trên bất kỳ tệp nào là hiển thị nội dung của nó. Với mục đích này, chúng ta có thể sử dụngprintlệnh in nội dung của bộ đệm mẫu. Vậy hãy cùng chúng tôi tìm hiểu thêm về đệm hoa văn
Đầu tiên, hãy tạo một tệp chứa số dòng, tên của cuốn sách, tác giả của nó và số trang. Trong hướng dẫn này, chúng tôi sẽ sử dụng tệp này. Bạn có thể sử dụng bất kỳ tệp văn bản nào theo sự thuận tiện của bạn. Tệp văn bản của chúng tôi sẽ trông như thế này:
[jerry]$ vi books.txt
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
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
Bây giờ, hãy để chúng tôi in nội dung tệp.
[jerry]$ sed 'p' books.txt
Khi đoạn mã trên được thực thi, nó sẽ cho ra kết quả như sau.
1) A Storm of Swords, George R. R. Martin, 1216
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
6) A Game of Thrones, George R. R. Martin, 864
Bạn có thể thắc mắc tại sao mỗi dòng được hiển thị hai lần. Hãy cùng chúng tôi tìm hiểu.
Bạn có nhớ quy trình làm việc của SED không? Theo mặc định, SED in nội dung của bộ đệm mẫu. Ngoài ra, chúng tôi đã bao gồm một lệnh in rõ ràng trong phần lệnh của chúng tôi. Do đó mỗi dòng được in hai lần. Nhưng đừng lo lắng. SED có-ntùy chọn để ngăn chặn in mặc định của bộ đệm mẫu. Lệnh sau minh họa điều đó.
[jerry]$ sed -n 'p' books.txt
Khi đoạn mã trên được thực thi, nó sẽ cho ra kết quả như sau.
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
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
Xin chúc mừng! chúng tôi đã nhận được kết quả mong đợi. Theo mặc định, SED hoạt động trên tất cả các tuyến. Nhưng chúng ta có thể buộc SED chỉ hoạt động trên một số tuyến nhất định. Ví dụ, trong ví dụ dưới đây, SED chỉ hoạt động trên dòng thứ 3. Trong ví dụ này, chúng tôi đã chỉ định một dải địa chỉ trước lệnh SED.
[jerry]$ sed -n '3p' books.txt
Khi đoạn mã trên được thực thi, nó sẽ cho ra kết quả như sau.
3) The Alchemist, Paulo Coelho, 197
Ngoài ra, chúng tôi cũng có thể hướng dẫn SED chỉ in một số dòng nhất định. Ví dụ, đoạn mã sau in tất cả các dòng từ 2 đến 5. Ở đây chúng tôi đã sử dụng toán tử dấu phẩy (,) để chỉ định phạm vi địa chỉ.
[jerry]$ sed -n '2,5 p' books.txt
Khi đoạn mã trên được thực thi, nó sẽ cho ra kết quả như sau.
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
Ngoài ra còn có một ký tự đặc biệt Dollar ($) đại diện cho dòng cuối cùng của tệp. Vì vậy, hãy để chúng tôi in dòng cuối cùng của tệp.
[jerry]$ sed -n '$ p' books.txt
Khi đoạn mã trên được thực thi, nó sẽ cho ra kết quả như sau.
6) A Game of Thrones, George R. R. Martin, 864
Tuy nhiên, chúng ta cũng có thể sử dụng ký tự Dollar ($) để chỉ định phạm vi địa chỉ. Ví dụ dưới đây in từ dòng 3 đến dòng cuối cùng.
[jerry]$ sed -n '3,$ p' books.txt
Khi đoạn mã trên được thực thi, nó sẽ cho ra kết quả như sau.
3) The Alchemist, Paulo Coelho, 197 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
Chúng ta đã học cách chỉ định dải địa chỉ bằng toán tử dấu phẩy (,). SED hỗ trợ thêm hai toán tử có thể được sử dụng để chỉ định dải địa chỉ. Đầu tiên là toán tử dấu cộng (+) và nó có thể được sử dụng với toán tử dấu phẩy (,). Ví dụM, +n sẽ in tiếp theo n dòng bắt đầu từ số dòng M. Nghe có vẻ khó hiểu? Hãy để chúng tôi kiểm tra nó bằng một ví dụ đơn giản. Ví dụ sau in 4 dòng tiếp theo bắt đầu từ dòng số 2.
[jerry]$ sed -n '2,+4 p' books.txt
Khi đoạn mã trên được thực thi, nó sẽ cho ra kết quả như sau.
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
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
Theo tùy chọn, chúng ta cũng có thể chỉ định dải địa chỉ bằng cách sử dụng toán tử dấu ngã (~). Nó sử dụngM~nhình thức. Nó chỉ ra rằng SED nên bắt đầu từ số dòng M và xử lý mọi (thứ) dòng. Ví dụ,50~5khớp với dòng số 50, 55, 60, 65, v.v. Hãy để chúng tôi chỉ in các dòng lẻ từ tệp.
[jerry]$ sed -n '1~2 p' books.txt
Khi đoạn mã trên được thực thi, nó sẽ cho ra kết quả như sau.
1) A Storm of Swords, George R. R. Martin, 1216
3) The Alchemist, Paulo Coelho, 197
5) The Pilgrimage, Paulo Coelho, 288
Đoạn mã sau chỉ in các dòng chẵn từ tệp.
[jerry]$ sed -n '2~2 p' books.txt
Khi đoạn mã trên được thực thi, nó sẽ cho ra kết quả như sau.
2) The Two Towers, J. R. R. Tolkien, 352
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
6) A Game of Thrones, George R. R. Martin, 864