Editor Aliran - Karakter Khusus

SED menyediakan dua karakter khusus yang diperlakukan sebagai perintah. Bab ini mengilustrasikan penggunaan dua karakter khusus ini.

= Perintah

Perintah "=" berhubungan dengan nomor baris. Diberikan di bawah ini adalah sintaks dari perintah "=":

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

Perintah = menulis nomor baris diikuti dengan isinya pada aliran keluaran standar. Contoh berikut menggambarkan hal ini.

[jerry]$ sed '=' books.txt

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

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

Mari kita cetak nomor baris dan isi empat baris pertama. Perintah berikut mencetak empat baris pertama dengan nomor baris dan sisanya tanpa nomor baris.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

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

Selain itu, kami dapat menginstruksikan SED untuk mencetak nomor baris saat pencocokan pola berhasil. Contoh berikut mencetak nomor baris yang berisi pola "Paulo".

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

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

Dapatkah Anda menebak apa yang dilakukan oleh perintah SED berikut?

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

6

Ya kamu benar. Ini menghitung jumlah baris yang ada di file. Mari kita temukan kodenya. Di bagian perintah, kami menggunakan "$ =" yang mencetak nomor baris dari baris terakhir diikuti dengan isinya. Tapi kami juga menyediakan-n bendera yang menekan pencetakan default buffer pola. Karenanya, hanya nomor baris terakhir yang ditampilkan.

& Perintah

SED mendukung karakter khusus &. Setiap kali pencocokan pola berhasil, karakter khusus ini menyimpan pola yang cocok. Ini sering digunakan dengan perintah substitusi. Mari kita lihat bagaimana kita dapat memanfaatkan fitur efisien ini.

Setiap baris di file book.txt diberi nomor. Mari kita tambahkan kata-katanyaBook numberdi awal setiap baris. Contoh berikut menggambarkan hal ini.

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

Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:

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

Contoh ini sangat sederhana. Pertama, kami mencari kemunculan pertama dari sebuah digit, yang merupakan nomor baris (itulah mengapa kami menggunakan [[: digit:]]) dan SED secara otomatis menyimpan pola yang cocok dalam karakter khusus &. Pada langkah kedua, kami memasukkan kata-kataBook number sebelum setiap pola yang cocok, yaitu, sebelum setiap baris.

Mari kita ambil contoh lain. Di file book.txt, digit terakhir menyiratkan jumlah halaman buku. Mari kita tambahkan "Pages =" sebelum itu. Untuk melakukan ini, temukan kemunculan terakhir dari digit tersebut dan ganti dengan "Pages = &". Di sini & menyimpan pola yang cocok, misalnya, jumlah halaman

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

Saat menjalankan sintaks di atas, Anda mendapatkan hasil sebagai berikut:

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

Untuk saat ini, ingatlah itu [[:digit:]]*$menemukan kemunculan terakhir dari digit tersebut. Pada bab "Ekspresi Reguler, kita akan mempelajari lebih lanjut tentang ekspresi reguler.