Editor Aliran - Penyangga Pola

Salah satu operasi dasar yang kami lakukan pada file apa pun adalah menampilkan isinya. Untuk tujuan ini, kita dapat menggunakan fileprintperintah yang mencetak konten buffer pola. Jadi mari kita pelajari lebih lanjut tentang buffer pola

Pertama buat file yang berisi nomor baris, nama buku, penulisnya, dan jumlah halaman. Dalam tutorial ini, kami akan menggunakan file ini. Anda dapat menggunakan file teks apa pun sesuai kenyamanan Anda. File teks kita akan terlihat seperti ini:

[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

Sekarang, mari kita cetak isi file.

[jerry]$ sed 'p' books.txt

Jika kode diatas dijalankan maka akan menghasilkan hasil sebagai berikut.

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

Anda mungkin bertanya-tanya mengapa setiap baris ditampilkan dua kali. Mari kita cari tahu.

Apakah Anda ingat alur kerja SED? Secara default, SED mencetak konten buffer pola. Selain itu, kami telah menyertakan perintah cetak secara eksplisit di bagian perintah kami. Karenanya setiap baris dicetak dua kali. Tapi jangan khawatir. SED memiliki-nopsi untuk menyembunyikan pencetakan default dari buffer pola. Perintah berikut mengilustrasikannya.

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

Jika kode diatas dijalankan maka akan menghasilkan hasil sebagai berikut.

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

Selamat! kami mendapatkan hasil yang diharapkan. Secara default, SED beroperasi di semua lini. Tetapi kami dapat memaksa SED untuk beroperasi hanya pada jalur tertentu. Misalnya, pada contoh di bawah ini, SED hanya beroperasi pada baris ke-3. Dalam contoh ini, kami telah menentukan rentang alamat sebelum perintah SED.

[jerry]$ sed -n '3p' books.txt

Jika kode diatas dijalankan maka akan menghasilkan hasil sebagai berikut.

3) The Alchemist, Paulo Coelho, 197

Selain itu, kami juga dapat menginstruksikan SED untuk hanya mencetak baris tertentu. Misalnya, kode berikut mencetak semua baris dari 2 sampai 5. Di sini kita telah menggunakan operator koma (,) untuk menentukan kisaran alamat.

[jerry]$ sed -n '2,5 p' books.txt

Jika kode diatas dijalankan maka akan menghasilkan hasil sebagai berikut.

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

Ada juga karakter khusus Dolar ($) yang mewakili baris terakhir file. Jadi mari kita cetak baris terakhir file tersebut.

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

Jika kode diatas dijalankan maka akan menghasilkan hasil sebagai berikut.

6) A Game of Thrones, George R. R. Martin, 864

Namun kita juga bisa menggunakan karakter Dollar ($) untuk menentukan kisaran alamat. Contoh di bawah ini mencetak melalui baris 3 hingga baris terakhir.

[jerry]$ sed -n '3,$ p' books.txt

Jika kode diatas dijalankan maka akan menghasilkan hasil sebagai berikut.

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

Kami belajar bagaimana menentukan rentang alamat menggunakan operator koma (,). SED mendukung dua operator lagi yang dapat digunakan untuk menentukan kisaran alamat. Pertama adalah operator plus (+) dan dapat digunakan dengan operator koma (,). MisalnyaM, +n akan mencetak berikutnya n baris dimulai dari nomor baris M. Kedengarannya membingungkan? Mari kita periksa dengan contoh sederhana. Contoh berikut mencetak 4 baris berikutnya mulai dari baris nomor 2.

[jerry]$ sed -n '2,+4 p' books.txt

Jika kode diatas dijalankan maka akan menghasilkan hasil sebagai berikut.

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

Secara opsional, kami juga dapat menentukan rentang alamat menggunakan operator tilde (~). Itu menggunakanM~nbentuk. Ini menunjukkan bahwa SED harus dimulai pada nomor baris M dan memproses setiap baris n (th). Misalnya,50~5cocok dengan nomor baris 50, 55, 60, 65, dan seterusnya. Mari kita mencetak hanya garis ganjil dari file tersebut.

[jerry]$ sed -n '1~2 p' books.txt

Jika kode diatas dijalankan maka akan menghasilkan hasil sebagai berikut.

1) A Storm of Swords, George R. R. Martin, 1216 
3) The Alchemist, Paulo Coelho, 197 
5) The Pilgrimage, Paulo Coelho, 288

Kode berikut hanya mencetak baris genap dari file.

[jerry]$ sed -n '2~2 p' books.txt

Jika kode diatas dijalankan maka akan menghasilkan hasil sebagai berikut.

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