Artikel ini adalah bagian dari seri Tutorial Unix Sed yang sedang berlangsung. Pada artikel sebelumnya, kita telah membahas tentang operasi sed print dan operasi sed delete.
Dalam artikel ini mari kita tinjau bagaimana menggunakan perintah pengganti sed “s”.
Perintah `s' mungkin yang paling penting dalam `sed' dan memiliki banyak opsi berbeda.
Perintah `s' mencoba mencocokkan ruang pola dengan REGEXP yang disediakan; jika kecocokan berhasil, maka bagian dari ruang pola yang dicocokkan tersebut diganti dengan REPLACEMENT.
Syntax: #sed 'ADDRESSs/REGEXP/REPLACEMENT/FLAGS' filename #sed 'PATTERNs/REGEXP/REPLACEMENT/FLAGS' filename
- s adalah perintah pengganti
- / adalah pembatas
- REGEXP adalah ekspresi reguler yang cocok
- REPLACEMENT adalah nilai yang harus diganti
BENDERA dapat berupa salah satu dari berikut
- g Ganti semua instance REGEXP dengan REPLACEMENT
- n Bisa berupa angka apa saja, ganti instance ke-n REGEXP dengan REPLACEMENT.
- p Jika substitusi dilakukan, maka cetak ruang pola baru.
- saya mencocokkan REGEXP dengan cara yang tidak peka huruf besar/kecil.
- w file Jika substitusi dibuat, tuliskan hasilnya ke file yang diberikan.
- Kita dapat menggunakan pembatas yang berbeda ( salah satu dari @ %; :) sebagai ganti /
Mari kita buat file geekstuff.txt terlebih dahulu yang akan digunakan dalam semua contoh yang disebutkan di bawah.
$ cat thegeekstuff.txt # Instruction Guides 1. Linux Sysadmin, Linux Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Security (Firewall, Network, Online Security etc) 4. Storage in Linux 5. Productivity (Too many technologies to explore, not much time available) # Additional FAQS 6. Windows- Sysadmin, reboot etc.
Mari kita tinjau beberapa contoh menarik untuk substitusi sekarang.
1. Ganti Word “Linux” ke “Linux-Unix” Menggunakan sed s//
Pada contoh di bawah ini, pada baris output “1. Linux-Unix Sysadmin, Linux Scripting dll” hanya Linux pertama yang digantikan oleh Linux-Unix. Jika tidak ada bendera yang ditentukan, kecocokan baris pertama akan diganti.
$ sed 's/Linux/Linux-Unix/' thegeekstuff.txt # Instruction Guides 1. Linux-Unix Sysadmin, Linux Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Security (Firewall, Network, Online Security etc) 4. Storage in Linux-Unix 5. Productivity (Too many technologies to explore, not much time available) # Additional FAQS 6. Windows- Sysadmin, reboot etc.
2. Substitusikan semua Kemunculan Kata Menggunakan sed s//g
Perintah sed di bawah ini menggantikan semua kemunculan Linux ke Linux-Unix menggunakan flag substitusi global “g”.
$ sed 's/Linux/Linux-Unix/g' thegeekstuff.txt # Instruction Guides 1. Linux-Unix Sysadmin, Linux-Unix Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Security (Firewall, Network, Online Security etc) 4. Storage in Linux-Unix 5. Productivity (Too many technologies to explore, not much time available) # Additional FAQS 6. Windows- Sysadmin, reboot etc.
3. Pengganti Hanya Kemunculan Kedua dari Sebuah Kata Menggunakan sed s//2
Pada contoh di bawah ini, pada baris output “1. Linux Sysadmin, Linux-Unix Scripting dll.” hanya kemunculan kedua dari Linux yang digantikan oleh Linux-Unix.
$ sed 's/Linux/Linux-Unix/2' thegeekstuff.txt # Instruction Guides 1. Linux Sysadmin, Linux-Unix Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Security (Firewall, Network, Online Security etc) 4. Storage in Linux 5. Productivity (Too many technologies to explore, not much time available) # Additional FAQS 6. Windows- Sysadmin, reboot etc.
4. Tulis Perubahan ke File dan Cetak Perubahan Menggunakan sed s//gpw
Contoh di bawah ini memiliki substitusi dengan tiga bendera. Ini mengganti semua kemunculan Linux ke Linux-Unix dan mencetak output yang diganti serta menulis yang sama ke file yang diberikan.
$ sed -n 's/Linux/Linux-Unix/gpw output' thegeekstuff.txt 1. Linux-Unix Sysadmin, Linux-Unix Scripting etc. 4. Storage in Linux-Unix $ cat output 1. Linux-Unix Sysadmin, Linux-Unix Scripting etc. 4. Storage in Linux-Unix
5. Substitusi Hanya Ketika Garis Cocok dengan Pola Menggunakan sed
Dalam contoh ini, jika garis cocok dengan pola “-“, maka semua karakter dari “-” akan diganti dengan yang kosong.
$ sed '/\-/s/\-.*//g' thegeekstuff.txt # Instruction Guides 1. Linux Sysadmin, Linux Scripting etc. 2. Databases 3. Security (Firewall, Network, Online Security etc) 4. Storage in Linux 5. Productivity (Too many technologies to explore, not much time available) # Additional FAQS 6. Windows
6. Hapus X Jumlah Karakter Terakhir Dari Setiap Baris Menggunakan sed
Contoh sed ini menghapus 3 karakter terakhir dari setiap baris.
$ sed 's/...$//' thegeekstuff.txt # Instruction Gui 1. Linux Sysadmin, Linux Scripting e 2. Databases - Oracle, mySQL e 3. Security (Firewall, Network, Online Security e 4. Storage in Li 5. Productivity (Too many technologies to explore, not much time availab # Additional F 6. Windows- Sysadmin, reboot e
7. Hilangkan Komentar Menggunakan sed
Hapus semua baris komentar dari file seperti yang ditunjukkan di bawah ini menggunakan perintah sed.
$ sed -e 's/#.*//' thegeekstuff.txt 1. Linux Sysadmin, Linux Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Security (Firewall, Network, Online Security etc) 4. Storage in Linux 5. Productivity (Too many technologies to explore, not much time available) 6. Windows- Sysadmin, reboot etc.
8. Hilangkan Komentar dan Baris Kosong Menggunakan sed
Dalam contoh ini, ada dua perintah yang dipisahkan oleh ';'
- Perintah pertama menggantikan baris yang dimulai dengan # ke baris kosong
- Perintah kedua menghapus baris kosong.
$ sed -e 's/#.*//;/^$/d' thegeekstuff.txt 1. Linux Sysadmin, Linux Scripting etc. 2. Databases - Oracle, mySQL etc. 3. Security (Firewall, Network, Online Security etc) 4. Storage in Linux 5. Productivity (Too many technologies to explore, not much time available) 6. Windows- Sysadmin, reboot etc.
9. Konversi baris baru DOS (CR/LF) ke format Unix Menggunakan sed
Salin file DOS ke Unix, Anda dapat menemukan \r\n di akhir setiap baris.
Contoh ini mengonversi format file DOS ke format file Unix menggunakan perintah sed.
$sed 's/.$//' filename
10. Hilangkan Tag HTML dari file Menggunakan sed
Dalam contoh ini, ekspresi reguler yang diberikan dalam perintah sed cocok dengan tag html dan diganti dengan yang kosong.
$ sed -e 's/<[^>]*>//g' This <b> is </b> an <i>example</i>. This is an example.