Artikel ini adalah bagian dari seri Tips dan Trik Unix Sed yang sedang berlangsung.
Seperti bahasa pemrograman lainnya, sed juga menyediakan perintah percabangan khusus untuk mengontrol aliran program.
Pada artikel ini, mari kita tinjau dua jenis percabangan Sed berikut.
- Cabang Tanpa Syarat Sed
- Cabang Bersyarat Sed
Sintaks Cabang Tanpa Syarat Sed:
$ sed ':label command(s) b label'
- :label – spesifikasi label.
- perintah – Semua perintah sed
- label – Nama apa saja untuk label
- label b – melompat ke label tanpa memeriksa kondisi apa pun. Jika label tidak ditentukan, maka lompat ke akhir skrip.
Sintaks Cabang Bersyarat Sed:
$ sed ':label command(s) t label'
- :label – spesifikasi label.
- perintah – Semua perintah sed
- label – Nama apa saja untuk label
- t label – melompat ke label hanya jika perintah pengganti terakhir mengubah ruang pola. Jika label tidak ditentukan, maka lompat ke akhir skrip.
Buat contoh file pengujian
Mari kita buat file geekstuff.txt terlebih dahulu yang akan digunakan dalam contoh yang disebutkan di bawah ini.
$ cat thegeekstuff.txt Linux Administration Scripting Tips and Tricks Windows Administration Database Administration of Oracle Administration of Mysql Security Network Online\ Security Productivity Google Search\ Tips "Web Based Time Tracking, Web Based Todo list and Reduce Key Stores etc" $
Aku. Contoh Sed untuk Cabang Tanpa Syarat
Contoh Sed 1. Ganti kemunculan pertama dari suatu pola di seluruh file
Dalam file thegeekstuff.txt ganti kemunculan pertama “Administrasi” menjadi “Pengawasan”.
$ sed '/Administration/{ s/Administration/Supervision/ :loop n b loop }' thegeekstuff.txt Linux Supervision Scripting Tips and Tricks Windows Administration Database Administration of Oracle Administration of Mysql Security Network Online\ Security Productivity Google Search\ Tips "Web Based Time Tracking, Web Based Todo list and Reduce Key Stores etc"
- Pada perintah sed di atas, ia hanya membaca baris demi baris dan mencetak ruang pola hingga Administrasi terjadi.
- Setelah Administrasi terjadi, ganti Administrasi menjadi Pengawasan (hanya satu kejadian, perhatikan bahwa tidak ada tanda 'g' sebagai pengganti).
- Setelah kemunculan pertama diganti, baca saja konten file yang tersisa dan cetak.
- “n” adalah perintah sed yang mencetak ruang pola dan menimpanya dengan baris berikutnya.
- Menggunakan “pengulangan” sebagai label. "n" mencetak baris saat ini dan menimpa ruang pola dengan baris berikutnya. b loop melompat ke :loop lagi. Jadi loop ini mencetak sisa konten thegeekstuff.txt.
Contoh Sed 2. Hapus data di antara pola ” ” di seluruh file
Dalam file contoh kami, ada tiga baris di antara "".
sed -e ':loop $!{ N /\n$/!b loop } s/\"[^\"]*\"//g' thegeekstuff.txt Linux Administration Scripting Tips and Tricks Windows Administration Database Administration of Oracle Administration of Mysql Security Network Online\ Security Productivity Google Search\ Tips $
- Perintah di atas tetap menambahkan semua baris file sampai akhir file terjadi.
- $! – Jika ini bukan akhir dari file.
- N – Tambahkan baris berikutnya dengan ruang pola yang dibatasi oleh \n
- /\n$/!b loop – Jika ini bukan baris terakhir dari file, lompat ke loop lagi.
- Sekarang semua baris akan tersedia di ruang pola yang dibatasi oleh baris baru. Ganti semua kemunculan data antara ” dengan yang kosong.
Contoh Sed 3. Hapus tag HTML dari sebuah file
Katakanlah, saya memiliki file dengan konten html berikut
$ cat index.html <html><body> <table border=2><tr><td valign=top align=right>1.</td> <td>Line 1 Column 2</ td> </table> </body></html>
Perintah sed berikut menghapus semua tag html dari file yang diberikan
$ sed '/</{ :loop s/<[^<]*>//g /</{ N b loop } }' index.html 1. Line 1 Column 2
- Setiap kali menemukan baris yang berisi ‘<‘, hapus semua tag HTML dari baris tersebut terlebih dahulu.
- Jika sekarang ruang pola berisi '<', ini menyiratkan tag multi-baris. Sekarang ulangi loop berikut:
- Bergabung dengan baris berikutnya
- Hapus semua tag HTML hingga tidak ada satu pun '<'
- Ketika tidak ada '<' di ruang pola, kami mencetaknya dan memulai siklus baru.
II. Contoh Sed untuk Cabang Bersyarat
Contoh Sed 4. Jika sebuah baris diakhiri dengan garis miring terbalik, tambahkan baris berikutnya.
File contoh kita memiliki dua baris yang diakhiri dengan garis miring terbalik, sekarang kita harus menambahkan baris berikutnya ke dalamnya.
$ sed ' :loop /\\$/N s/\\\n */ / t loop' thegeekstuff.txt Linux Administration Scripting Tips and Tricks Windows Administration Database Administration of Oracle Administration of Mysql Security Network Online Security Productivity Google Search Tips "Web Based Time Tracking, Web Based Todo list and Reduce Key Stores etc"
- Periksa apakah baris diakhiri dengan garis miring terbalik (/\\$/), jika ya, baca dan tambahkan baris berikutnya ke ruang pola, dan gantikan \ di akhir baris dan jumlah spasi yang diikuti dengan itu, dengan satu spasi.
- Jika substitusi berhasil ulangi langkah di atas. Cabang akan dieksekusi hanya jika substitusi berhasil.
- Cabang bersyarat banyak digunakan untuk pola rekursif.
Contoh Sed 5. Commify string numerik.
sed ' :loop s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/ t loop' 12342342342343434 12,342,342,342,343,434
- Kelompokkan angka menjadi dua kelompok.
- Grup pertama adalah semua digit hingga tiga digit terakhir. Tiga digit terakhir mendapat tangkapan di grup ke-2.
- Kemudian dua grup yang cocok dipisahkan dengan koma. Kemudian aturan yang sama diterapkan ke garis lagi dan lagi sampai semua angka dikelompokkan dalam kelompok tiga.
- Misalnya, pada iterasi pertama menjadi 12342342342343,434
- Pada iterasi berikutnya 12342342342,343,434 dan seterusnya sampai ada kurang dari tiga digit.
Contoh Sed 6. Pemformatan :Ganti setiap spasi awal baris dengan '+'
$ sed ' s/^ */&\n/ :loop s/^\n//;s/ \n/\n+/ t loop' test Linux ++++++++Administration ++++++++Scripting ++++++++++++++++Tips and Tricks Windows ++++++++Administration Database ++++++++Administration of Oracle ++++++++Administration of Mysql Security ++++++++Network +++++++++++++++++Online\ ++++++++Security Productivity ++++++++Google Search\ ++++++++Tips ++++++++"Web Based Time Tracking, ++++++++Web Based Todo list and ++++++++Reduce Key Stores etc"
- Pisahkan semua spasi awal dan karakter lain dari sebuah baris dengan karakter baris baru.
- Sekarang ganti spasi dan baris baru dengan baris baru dan +. Jadi dari kanan ke kiri spasi akan diganti dengan + dan baris baru akan dipindahkan ke kiri untuk satu karakter.
- Akhirnya di awal baris \n akan ada, jadi hapus baris baru itu.