GNU/Linux >> Belajar Linux >  >> Linux

Tutorial Unix Sed:6 Contoh Operasi Percabangan Sed

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.

  1. Cabang Tanpa Syarat Sed
  2. 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"
  1. Pada perintah sed di atas, ia hanya membaca baris demi baris dan mencetak ruang pola hingga Administrasi terjadi.
  2. Setelah Administrasi terjadi, ganti Administrasi menjadi Pengawasan (hanya satu kejadian, perhatikan bahwa tidak ada tanda 'g' sebagai pengganti).
  3. 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
$
  1. 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.
  2. 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
  1. Setiap kali menemukan baris yang berisi ‘<‘, hapus semua tag HTML dari baris tersebut terlebih dahulu.
  2. 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 '<'
  3. 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"
  1. 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.
  2. Jika substitusi berhasil ulangi langkah di atas. Cabang akan dieksekusi hanya jika substitusi berhasil.
  3. 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
  1. Kelompokkan angka menjadi dua kelompok.
  2. Grup pertama adalah semua digit hingga tiga digit terakhir. Tiga digit terakhir mendapat tangkapan di grup ke-2.
  3. 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.
  4. Misalnya, pada iterasi pertama menjadi 12342342342343,434
  5. 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"
  1. Pisahkan semua spasi awal dan karakter lain dari sebuah baris dengan karakter baris baru.
  2. 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.
  3. Akhirnya di awal baris \n akan ada, jadi hapus baris baru itu.

Linux
  1. Tutorial perintah cd Linux untuk pemula (8 Contoh)

  2. Tutorial perintah comm Linux untuk pemula (5 contoh)

  3. Tutorial Perintah Tanggal Linux untuk Pemula (8 Contoh)

  1. Tutorial Perintah Linux df untuk Pemula (8 Contoh)

  2. Tutorial Perintah Linux du untuk Pemula (10 Contoh)

  3. Tutorial Perintah gema Linux untuk Pemula (5 Contoh)

  1. Tutorial Perintah Linux env Untuk Pemula (5 Contoh)

  2. Tutorial Perintah ukuran Linux untuk Pemula (6 Contoh)

  3. Linux membunuh Tutorial Perintah untuk Pemula (5 Contoh)