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.