Stream Editor - Perintah Dasar
Bab ini menjelaskan beberapa perintah SED yang berguna.
Hapus Perintah
SED menyediakan berbagai perintah untuk memanipulasi teks. Mari kita telusuri dulu tentangdeleteperintah. Berikut adalah cara Anda menjalankan perintah hapus:
[address1[,address2]]d
address1 dan address2adalah alamat awal dan akhir masing-masing, yang dapat berupa nomor baris atau string pola. Kedua alamat ini adalah parameter opsional.
Seperti namanya, perintah delete digunakan untuk melakukan operasi delete dan karena SED beroperasi secara online, kita dapat mengatakan bahwa perintah ini digunakan untuk menghapus baris. Perhatikan bahwa perintah delete menghapus baris hanya dari buffer pola; baris tidak dikirim ke aliran keluaran dan file asli tetap tidak berubah. Contoh berikut mengilustrasikan poin tersebut.
[jerry]$ sed 'd' books.txt
Tapi dimana outputnya? Jika tidak ada alamat baris yang diberikan, maka SED beroperasi di setiap baris secara default. Oleh karena itu, ini menghapus semua garis dari buffer pola. Itulah mengapa perintah tidak mencetak apa pun pada keluaran standar.
Mari kita instruksikan SED untuk beroperasi hanya pada jalur tertentu. Contoh berikut hanya menghapus baris ke-4.
[jerry]$ sed '4d' 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) The Alchemist, Paulo Coelho, 197
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
Selain itu, SED juga menerima rentang alamat menggunakan koma (,). Kita dapat menginstruksikan SED untuk menghapus baris N1 ke N2. Misalnya, contoh berikut menghapus semua baris dari 2 hingga 4.
[jerry]$ sed '2, 4 d' books.txt
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
1) A Storm of Swords, George R. R. Martin, 1216
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
Rentang alamat SED tidak hanya terbatas pada angka. Kami juga dapat menentukan pola sebagai alamat. Contoh berikut menghapus semua buku dari penulis Paulo Coelho.
[jerry]$ sed '/Paulo Coelho/d' 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
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
6) A Game of Thrones, George R. R. Martin, 864
Kami juga dapat menentukan rentang alamat menggunakan pola tekstual. Contoh berikut menghapus semua garis di antara polaStorm dan Fellowship.
[jerry]$ sed '/Storm/,/Fellowship/d' books.txt
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
Selain itu, kita juga dapat menggunakan operator dollar ($), plus (+), dan tilde (~) dengan SED.
Tulis Perintah
Salah satu operasi penting yang kami lakukan pada file apa pun adalah pencadangan, yaitu kami membuat salinan lain dari file tersebut. SED menyediakanwriteperintah untuk menyimpan konten buffer pola dalam sebuah file. Diberikan di bawah ini adalah sintakswrite perintah yang mirip dengan delete perintah.
[address1[,address2]]w file
Sini, address1 dan address2adalah alamat awal dan akhir masing-masing, yang dapat berupa nomor baris atau string pola. Kedua alamat ini adalah parameter opsional.
Dalam sintaks di atas, w mengacu pada perintah tulis dan fileadalah nama file tempat Anda menyimpan konten. Berhati-hatilah denganfileparameter. Ketika nama file diberikan, SED membuat file dengan cepat jika tidak ada, dan menimpanya jika sudah ada.
Mari kita buat salinan persis file tersebut menggunakan SED. Perhatikan bahwa harus ada satu spasi di antaranyaw dan file.
[jerry]$ sed -n 'w books.bak' books.txt
Kami membuat file lain bernama books.bak. Sekarang verifikasi bahwa kedua file tersebut memiliki konten yang identik.
[jerry]$ diff books.txt books.bak
[jerry]$ echo $?
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
0
Anda mungkin berasumsi bahwa file cpperintah melakukan hal yang persis sama. Iya! Itucpperintah melakukan hal yang sama, tetapi SED adalah utilitas yang matang. Ini memungkinkan membuat file yang hanya berisi baris tertentu dari file sumber. Mari kita simpan hanya baris genap ke file lain.
[jerry]$ sed -n '2~2 w junk.txt' books.txt
[jerry]$ cat junk.txt
Saat menjalankan kode di atas, Anda mendapatkan 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
Anda juga dapat menggunakan operator koma (,), dollar ($), dan plus (+) dengan perintah tulis.
Selain itu, SED juga mendukung pencocokan pola dengan perintah tulis. Misalkan Anda ingin menyimpan semua buku dari masing-masing penulis ke dalam file terpisah. Salah satu cara yang membosankan dan panjang adalah melakukannya secara manual, dan cara yang lebih cerdas adalah dengan menggunakan SED.
[jerry]$ sed -n -e '/Martin/ w Martin.txt' -e '/Paulo/ w Paulo.txt' -e '/Tolkien/ w
Tolkien.txt' books.txt
Dalam contoh di atas, kami mencocokkan setiap baris dengan pola dan menyimpan baris yang cocok dalam file tertentu. Ini sangat sederhana. Untuk menentukan banyak perintah, kami menggunakan-eberalih dari perintah SED. Sekarang mari kita lihat apa yang setiap file berisi:
[jerry]$ cat Martin.txt
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
1) A Storm of Swords, George R. R. Martin, 1216
6) A Game of Thrones, George R. R. Martin, 864
Mari kita tampilkan isi file tersebut.
[jerry]$ cat Paulo.txt
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
3) The Alchemist, Paulo Coelho, 197
5) The Pilgrimage, Paulo Coelho, 288
Mari kita tampilkan isi file tersebut.
[jerry]$ cat Tolkien.txt
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
2) The Two Towers, J. R. R. Tolkien, 352
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
Luar biasa! Kami mendapatkan hasil yang diharapkan. SED benar-benar merupakan utilitas yang luar biasa.
Tambahkan Perintah
Salah satu operasi paling berguna dari editor teks mana pun adalah menyediakan fungsionalitas tambahan. SED mendukung operasi ini melalui perintah tambahkan. Diberikan di bawah ini adalah sintaks dari append:
[address]a\
Append text
Mari kita tambahkan entri buku baru setelah baris nomor 4. Contoh berikut menunjukkan bagaimana melakukannya
[jerry]$ sed '4 a 7) Adultry, Paulo Coelho, 234' 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) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
7) Adultry, Paulo Coelho, 234
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
Di bagian perintah, 4 menyiratkan nomor baris, a adalah perintah append, dan bagian sisanya adalah teks yang akan ditambahkan.
Mari kita masukkan baris teks di akhir file. Untuk melakukan ini, gunakan$sebagai alamatnya. Contoh berikut menggambarkan hal ini:
[jerry]$ sed '$ a 7) Adultry, Paulo Coelho, 234' 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) 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
7) Adultry, Paulo Coelho, 234
Selain nomor baris, kita juga dapat menentukan alamat menggunakan pola tekstual. Misalnya, contoh berikut menambahkan teks setelah mencocokkan stringThe Alchemist.
[jerry]$ sed '/The Alchemist/ a 7) Adultry, Paulo Coelho, 234' 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) The Alchemist, Paulo Coelho, 197
7) Adultry, Paulo Coelho, 234
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
Perhatikan bahwa jika ada beberapa pola yang cocok, teks akan ditambahkan setelah setiap kecocokan. Contoh berikut menggambarkan skenario ini.
[jerry]$ sed '/The/ a 7) Adultry, Paulo Coelho, 234' 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
7) Adultry, Paulo Coelho, 234
3) The Alchemist, Paulo Coelho, 197
7) Adultry, Paulo Coelho, 234
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
7) Adultry, Paulo Coelho, 234
5) The Pilgrimage, Paulo Coelho, 288
7) Adultry, Paulo Coelho, 234
6) A Game of Thrones, George R. R. Martin, 864
Ubah Perintah
SED menyediakan change atau replaceperintah yang diwakili oleh c. Perintah ini membantu mengganti baris yang ada dengan teks baru. Saat rentang baris disediakan, semua baris diganti sebagai grup dengan satu baris teks. Diberikan di bawah ini adalah sintaks dari perintah perubahan:
[address1[,address2]]c\
Replace text
Mari kita ganti baris ketiga dengan beberapa teks lainnya.
[jerry]$ sed '3 c 3) Adultry, Paulo Coelho, 324' 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) Adultry, Paulo Coelho, 324
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
SED juga menerima pola sebagai alamat. Dalam contoh berikut, garis diganti saat pencocokan pola berhasil.
[jerry]$ sed '/The Alchemist/ c 3) Adultry, Paulo Coelho, 324' 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) Adultry, Paulo Coelho, 324
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
SED juga memungkinkan penggantian beberapa baris dengan satu baris. Contoh berikut menghapus baris dari keempat hingga keenam dan menggantinya dengan teks baru.
[jerry]$ sed '4, 6 c 4) Adultry, Paulo Coelho, 324' 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) The Alchemist, Paulo Coelho, 197
4) Adultry, Paulo Coelho, 324
Sisipkan Perintah
Perintah insert bekerja dengan cara yang sama seperti append. Satu-satunya perbedaan adalah ia menyisipkan garis sebelum posisi tertentu. Diberikan di bawah ini adalah sintaks dari perintah insert:
[address]i\
Insert text
Mari kita pahami perintah insert dengan beberapa contoh. Perintah berikut menyisipkan entri baru sebelum baris keempat.
[jerry]$ sed '4 i 7) Adultry, Paulo Coelho, 324' 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) The Alchemist, Paulo Coelho, 197
7) Adultry, Paulo Coelho, 324
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
Dalam contoh di atas, 4 adalah nomor lokasi, i menyiratkan perintah sisipkan, dan bagian sisanya adalah teks yang akan disisipkan.
Untuk menyisipkan teks di awal file, berikan alamat baris sebagai 1. Perintah berikut menggambarkan ini:
[jerry]$ sed '1 i 7) Adultry, Paulo Coelho, 324' books.txt
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
7) Adultry, Paulo Coelho, 324
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
Selain itu, kami dapat memasukkan banyak baris. Perintah berikut menyisipkan dua baris sebelum baris terakhir.
[jerry]$ sed '$ i 7) Adultry, Paulo Coelho, 324
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
8) Eleven Minutes, Paulo Coelho, 304' 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
7) Adultry, Paulo Coelho, 324
8) Eleven Minutes, Paulo Coelho, 304
6) A Game of Thrones, George R. R. Martin, 864
Perhatikan bahwa entri yang akan disisipkan dimasukkan pada baris terpisah dan dibatasi oleh karakter garis miring terbalik (\).
Terjemahkan Perintah
SED menyediakan perintah untuk menerjemahkan karakter dan direpresentasikan sebagai y. Ini mengubah karakter berdasarkan posisi. Diberikan di bawah ini adalah sintaks dari perintah terjemahan:
[address1[,address2]]y/list-1/list-2/
Perhatikan bahwa terjemahan didasarkan pada posisi karakter dari list 1 ke karakter di posisi yang sama di list 2dan kedua daftar harus berupa daftar karakter eksplisit. Ekspresi reguler dan kelas karakter tidak didukung. Selain itu, ukuran filelist 1 dan list 2 harus sama.
Contoh berikut mengonversi angka Arab menjadi angka Romawi.
[jerry]$ echo "1 5 15 20" | sed 'y/151520/IVXVXX/'
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
I V IV XX
l perintah
Dapatkah Anda membedakan antara kata-kata yang dipisahkan oleh spasi dan kata-kata yang dipisahkan oleh karakter tab hanya dengan melihatnya? Tentu tidak. Tetapi SED dapat melakukan ini untuk Anda. SED menggunakanlperintah untuk menampilkan karakter tersembunyi dalam teks. Misalnya, karakter tab dengan\t dan End-Of-Line dengan $karakter. Diberikan di bawah ini adalah sintaksl perintah.
[address1[,address2]]l
[address1[,address2]]l [len]
Mari kita buat file dengan karakter tab untuk demonstrasi. Untuk mempermudah, kita akan menggunakan file yang sama, hanya dengan mengganti spasi dengan tab. Tunggu! Tetapi bagaimana cara melakukannya - dengan membuka file di editor teks dan mengganti setiap spasi dengan tab? Tentu tidak! Kami dapat menggunakan perintah SED untuk itu.
[jerry]$ sed 's/ /\t/g' books.txt > junk.txt
Sekarang mari kita tampilkan karakter tersembunyi dengan menggunakan l perintah:
[jerry]$ sed -n 'l' junk.txt
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
1)\tA\tStorm\tof\tSwords,George\tR.\tR.\tMartin,1216$
2)\tThe\tTwo\tTowers,J.\tR.\tR.\tTolkien,352$
3)\tThe\tAlchemist,Paulo\tCoelho,197$
4)\tThe\tFellowship\tof\tthe\tRing,J.\tR.\tR.\tTolkien,432$
5)\tThe\tPilgrimage,Paulo\tCoelho,288$
6)\tA\tGame\tof\tThrones,George\tR.\tR.\tMartin\t,864$
Seperti perintah SED lainnya, ia juga menerima nomor baris dan pola sebagai alamat. Anda bisa mencobanya sendiri.
Mari kita lihat lebih dekat fitur menarik lainnya dari SED. Kita dapat menginstruksikan SED untuk melakukan penggabungan baris setelah sejumlah karakter. Contoh berikut membungkus baris setelah 25 karakter.
[jerry]$ sed -n 'l 25' books.txt
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
1) A Storm of Swords,Geo\
rge R. R. Martin,1216$
2) The Two Towers,J. R. \
R. Tolkien,352$
3) The Alchemist,Paulo C\
oelho,197$
4) The Fellowship of the\
Ring,J. R. R. Tolkien,4\
32$
5) The Pilgrimage,Paulo \
Coelho,288$
6) A Game of Thrones,Geo\
rge R. R. Martin ,864$
Perhatikan bahwa dalam contoh di atas, batas bungkus diberikan setelah perintah l. Dalam hal ini, terdiri dari 25 karakter. Opsi ini khusus GNU dan mungkin tidak berfungsi dengan varian SED lainnya.
Batas bungkus 0 berarti tidak pernah memutus baris kecuali ada karakter baris baru. Perintah sederhana berikut menggambarkan hal ini.
[jerry]$ sed -n 'l 0' 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) 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$
Keluar dari Perintah
Perintah Quit menginstruksikan SED untuk keluar dari aliran eksekusi saat ini. Itu diwakili olehqperintah. Diberikan di bawah ini adalah sintaks dari perintah berhenti:
[address]q
[address]q [value]
Perhatikan bahwa perintah berhenti tidak menerima kisaran alamat, ini hanya mendukung satu alamat. Secara default, SED mengikuti alur kerja baca, eksekusi, dan ulangi; tetapi ketika perintah berhenti ditemukan, itu hanya menghentikan eksekusi saat ini.
Mari kita cetak 3 baris pertama dari file tersebut.
[jerry]$ sed '3 q' 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) The Alchemist, Paulo Coelho, 197
Selain nomor baris, kita juga bisa menggunakan pola tekstual. Perintah berikut berhenti ketika kecocokan pola berhasil.
[jerry]$ sed '/The Alchemist/ q' 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) The Alchemist, Paulo Coelho, 197
Selain itu, SED juga dapat menerima a valueyang dapat digunakan sebagai status keluar. Perintah berikut menunjukkan status keluarnya sebagai 100.
[jerry]$ sed '/The Alchemist/ q 100' 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) The Alchemist, Paulo Coelho, 197
Sekarang mari kita verifikasi status keluar.
[jerry]$ echo $?
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
100
Baca Command
Kami dapat menginstruksikan SED untuk membaca konten file dan menampilkannya ketika kondisi tertentu cocok. Perintah diwakili oleh alfabetr. Diberikan di bawah ini adalah sintaks dari perintah baca.
[address]r file
Perhatikan bahwa harus ada tepat satu spasi di antara r perintah dan nama file.
Mari kita pahami dengan contoh sederhana. Buat file contoh bernamajunk.txt.
[jerry]$ echo "This is junk text." > junk.txt
Perintah berikut menginstruksikan SED untuk membaca konten junk.txt dan masukkan setelah baris ketiga.
[jerry]$ sed '3 r junk.txt' 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) The Alchemist, Paulo Coelho, 197
This is junk text.
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
Dalam contoh di atas, 3 menyiratkan alamat baris, r adalah nama perintah, dan junk.txtadalah nama file yang isinya akan ditampilkan. Selain itu, GNU SED juga menerima berbagai alamat. Misalnya, perintah berikut menyisipkan kontenjunk.txt setelah baris ketiga, keempat, dan kelima.
[jerry]$ sed '3, 5 r junk.txt' 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) The Alchemist, Paulo Coelho, 197
This is junk text.
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
This is junk text.
5) The Pilgrimage, Paulo Coelho, 288
This is junk text.
6) A Game of Thrones, George R. R. Martin, 864
Seperti perintah SED lainnya, perintah baca juga menerima pola sebagai alamat. Misalnya, perintah berikut menyisipkan kontenjunk.txt saat pencocokan pola berhasil.
[jerry]$ sed '/Paulo/ r junk.txt' 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) The Alchemist, Paulo Coelho, 197
This is junk text.
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
This is junk text.
6) A Game of Thrones, George R. R. Martin, 864
Jalankan Perintah
Kita dapat menjalankan perintah eksternal dari SED menggunakan executeperintah. Itu diwakili olehe. Diberikan di bawah ini adalah sintaks dari perintah eksekusi.
[address1[,address2]]e [command]
Mari kita gambarkan perintah eksekusi dengan contoh sederhana. Perintah SED berikut menjalankan UNIXdate perintah sebelum baris ketiga.
[jerry]$ sed '3 e date' 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
Sun Sep 7 18:04:49 IST 2014
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
Seperti perintah lain, ia juga menerima pola sebagai alamat. Misalnya, contoh berikut dijalankandateperintah ketika kecocokan pola berhasil. Perhatikan bahwa setelah setiap pola cocok, pertama-tama perintah dijalankan dan kemudian konten buffer pola ditampilkan.
[jerry]$ sed '/Paulo/ e date' 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
Sun Sep 7 18:06:04 IST 2014
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
Sun Sep 7 18:06:04 IST 2014
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
Jika Anda mengamati sintaks file e perintah dengan hati-hati, Anda akan melihat itu commandbersifat opsional. Ketika tidak ada perintah yang diberikan setelahnyae,itu memperlakukan konten buffer pola sebagai perintah eksternal. Untuk mengilustrasikan hal ini, mari kita buat file commands.txt dengan beberapa perintah sederhana.
[jerry]$ echo -e "date\ncal\nuname" > commands.txt
[jerry]$ cat commands.txt
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
date
cal
uname
Perintah dari file sudah cukup jelas. Dengan tidak adanyacommand setelah e,SED menjalankan semua perintah ini satu per satu. Contoh sederhana berikut menggambarkan hal ini.
[jerry]$ sed 'e' commands.txt
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
Sun Sep 7 18:14:20 IST 2014
September 2014
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Linux
Seperti perintah SED lainnya, perintah eksekusi juga menerima semua rentang alamat yang valid.
Perintah Miscellaneous
Secara default, SED beroperasi pada satu jalur, namun SED juga dapat beroperasi pada banyak jalur. Perintah multi-baris dilambangkan dengan huruf besar. Misalnya, tidak seperti filen perintah, itu Nperintah tidak menghapus dan mencetak ruang pola. Sebagai gantinya, ia menambahkan baris baru (\ n) di akhir ruang pola saat ini dan menambahkan baris berikutnya dari file masukan ke ruang pola saat ini dan melanjutkan dengan aliran standar SED dengan menjalankan perintah SED lainnya. Diberikan di bawah ini adalah sintaks dariN perintah.
[address1[,address2]]N
Mari kita cetak daftar judul buku dan penulisnya masing-masing dengan dipisahkan koma. Contoh berikut menggambarkan hal ini.
[jerry]$ sed 'N; s/\n/, /g' books.txt
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
A Storm of Swords, George R. R. Martin
The Two Towers, J. R. R. Tolkien
The Alchemist, Paulo Coelho
The Fellowship of the Ring, J. R. R. Tolkien
The Pilgrimage, Paulo Coelho
A Game of Thrones, George R. R. Martin
Mari kita pahami cara kerja contoh di atas. ItuNperintah membaca baris pertama, yaitu, A Storm of Swords ke dalam buffer pola dan menambahkan \ n diikuti oleh baris berikutnya. Ruang pola sekarang berisi A Storm of Swords\nGeorge RR Martin. Pada langkah selanjutnya, kami mengganti baris baru dengan koma.
Suka p perintah, kami memiliki P perintah untuk mencetak bagian pertama (hingga baris baru tertanam) dari ruang pola multi-baris yang dibuat oleh Nperintah. Diberikan di bawah ini adalah sintaks dariP perintah yang mirip dengan p perintah.
[address1[,address2]]P
Pada contoh sebelumnya, kami melihat bahwa Nperintah membuat daftar judul buku dan penulisnya yang dipisahkan baris baru. Mari kita cetak hanya bagian pertama saja, yaitu judul buku saja. Perintah berikut menggambarkan hal ini.
[jerry]$ sed -n 'N;P' books.txt
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
A Storm of Swords
The Two Towers
The Alchemist
The Fellowship of the Ring
The Pilgrimage
A Game of Thrones
Perhatikan bahwa jika tidak ada N, itu berperilaku sama seperti pperintah. Perintah sederhana berikut menggambarkan skenario ini.
[jerry]$ sed -n 'P' books.txt
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
A Storm of Swords
George R. R. Martin
The Two Towers
J. R. R. Tolkien
The Alchemist
Paulo Coelho
The Fellowship of the Ring
J. R. R. Tolkien
The Pilgrimage
Paulo Coelho
A Game of Thrones
George R. R. Martin
Selain itu, SED juga menyediakan a vperintah yang memeriksa versi. Jika versi yang disediakan lebih besar dari versi SED yang diinstal, maka eksekusi perintah akan gagal. Perhatikan bahwa opsi ini khusus GNU dan mungkin tidak berfungsi dengan varian SED lainnya. Diberikan di bawah ini adalah sintaksv perintah.
[address1[,address2]]v [version]
Pertama, cari tahu versi SED saat ini.
[jerry]$ sed --version
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
sed (GNU sed) 4.2.2
Dalam contoh berikut, versi SED lebih besar dari versi 4.2.2, oleh karena itu perintah SED membatalkan eksekusinya.
[jerry]$ sed 'v 4.2.3' books.txt
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
sed: -e expression #1, char 7: expected newer version of sed
Tetapi jika versi yang disediakan lebih rendah dari atau sama dengan versi 4.2.2, maka perintah berfungsi seperti yang diharapkan.
[jerry]$ sed 'v 4.2.2' books.txt
Saat menjalankan kode di atas, Anda mendapatkan hasil sebagai berikut:
A Storm of Swords
George R. R. Martin
The Two Towers
J. R. R. Tolkien
The Alchemist
Paulo Coelho
The Fellowship of the Ring
J. R. R. Tolkien
The Pilgrimage
Paulo Coelho
A Game of Thrones George R. R. Martin