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