GNU/Linux >> Belajar Linux >  >> Linux

Tutorial Unix Sed :7 Contoh Operasi Sed Hold dan Pattern Buffer

Artikel ini adalah bagian dari seri Tips dan Trik Unix Sed yang sedang berlangsung.

Dalam artikel sed kami sebelumnya, kami telah mempelajari — pencetakan sed, penghapusan sed, penggantian sed , penulisan file sed, beberapa perintah sed, operasi multi-baris sed, dan manipulasi baris file sed.

Di bagian pertama tutorial sed, kami mempelajari bahwa sed memiliki dua buffer — sed pattern buffer dan sed menahan buffer . Sejauh ini kita hanya berbicara tentang buffer pola.

Dalam artikel ini mari kita tinjau cara menggunakan sed hold dan pattern buffer menggunakan 7 contoh sed praktis .

Sesuai dengan namanya, sed hold buffer digunakan untuk menyimpan semua atau sebagian dari ruang pola sed untuk pengambilan selanjutnya. Isi ruang pola dapat disalin ke ruang penahan, lalu kembali lagi. Tidak ada operasi yang dilakukan secara langsung di ruang tunggu. sed menyediakan satu set fungsi hold dan get untuk menangani gerakan ini.

Fungsi sed h

Fungsi h (hold) menyalin konten ruang pola ke dalam area holding (juga disebut sebagai sed hold space ), menghancurkan konten sebelumnya dari area penyimpanan.

Fungsi Sed H

Fungsi H menambahkan konten ruang pola ke konten area penahan. Konten lama dan konten baru dipisahkan oleh baris baru.

Fungsi sed g

Fungsi g menyalin konten area penahan ke dalam ruang pola, menghancurkan konten ruang pola sebelumnya.

Fungsi Sed G

Fungsi G menambahkan konten area penahan ke konten ruang pola. Isi lama dan baru dipisahkan oleh baris baru. Jumlah maksimum alamat adalah dua.

Fungsi Sed x

Fungsi pertukaran menukar isi ruang pola dan area penahan. Jumlah maksimum alamat adalah dua.

Sekarang mari kita lihat beberapa contoh untuk mempelajari perintah di atas.

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
        Mysql
        Oracle
        Queries
        Procedures

1. Beri Spasi Ganda pada Konten File Menggunakan Perintah Sed

$sed 'G' thegeekstuff.txt
#Linux

        Administration

        Scripting

        Tips and Tricks

#Windows

        Administration

#Database

        Mysql

        Oracle

        Queries

        Procedures 

$

Dalam contoh ini,

  1. Sed membaca sebuah baris dan menempatkannya di buffer pola.
  2. Perintah G menambahkan buffer penahan ke buffer pola yang dipisahkan oleh \n. jadi satu baris baru akan ditambahkan dengan konten ruang pola.
  3. Demikian pula, Jika Anda ingin melipatgandakan ruang file, tambahkan konten buffer tahan ke buffer pola dua kali. (G;G)

2. Cetak Konten File dalam Urutan Terbalik Menggunakan Perintah Sed

Cetak baris file dalam urutan terbalik (mirip dengan perintah tac yang telah kita bahas sebelumnya).

$sed -n '1!G;h;$p' thegeekstuff.txt
        Procedures
        Queries
        Oracle
        Mysql
#Database

        Administration
#Windows

        Tips and Tricks
        Scripting
        Administration
#Linux

Dalam contoh ini,

  1. Baris pertama akan ditempatkan di ruang tunggu sebagaimana adanya.
  2. Dari baris ke-2 dan seterusnya, cukup tambahkan konten ruang tahan dengan ruang pola. (Ingat baris ke-2 di ruang pola, dan baris ke-1 di ruang tunggu).
  3. Sekarang baris ke-1 dan ke-2 dibalik dan pindahkan ini ke ruang tunggu.
  4. Ulangi langkah di atas sampai baris terakhir.
  5. Setelah baris terakhir tercapai, cukup tambahkan konten ruang tahan dengan ruang pola dan cetak ruang pola.

3. Cetak Paragraf (Hanya jika berisi pola yang diberikan) Menggunakan Perintah Sed

Dalam paragraf cetak thegeekstuff.txt hanya jika berisi pola "Administrasi".

$ sed -e '/./{H;$!d;}' -e 'x;/Administration/!d' thegeekstuff.txt 

Linux
        Administration
        Scripting
        Tips and Tricks

Windows
        Administration

Dalam contoh ini,

  1. Sampai baris kosong datang, terus tambahkan baris yang tidak kosong ke dalam ruang tunggu
  2. Ketika baris kosong datang yaitu paragraf berakhir, tukar data antara pola dan ruang tahan. Sehingga seluruh paragraf akan tersedia dalam ruang pola.
    Periksa apakah pola “Administrasi” tersedia, jika ya jangan hapus yaitu cetak ruang pola

4. Cetak garis tepat sebelum kecocokan pola menggunakan Perintah Sed

Cetak hanya baris sebelumnya, pola "Mysql".

$ sed -n '/Mysql/{g;1!p;};h' thegeekstuff.txt
#Database

Dalam contoh ini,

  1. Untuk setiap siklus, masukkan baris ke dalam hold buffer, jika tidak sesuai dengan pola “Mysql”.
  2. Jika garis cocok dengan pola, ambil data dari ruang tunggu (baris sebelumnya) menggunakan perintah g dan cetak.
  3. Jika baris pertama cocok dengan pola “Mysql”, maka spasi akan kosong.(Tidak ada baris sebelumnya ke baris pertama). Jadi baris pertama tidak boleh dicetak(1!p)

5. Hapus baris terakhir setiap paragraf menggunakan Perintah Sed

$ sed -n -e '/^$/{x;d}' -e '/./x;p' thegeekstuff.txt 

#Linux
        Administration
        Scripting

#Windows

#Database
        Mysql
        Oracle
        Queries

Dalam contoh ini,

  1. Jika garis tidak kosong, maka tukar garis antara pola dan ruang tahan. Jadi baris pertama akan ditempatkan di ruang tunggu.
  2. Saat baris tidak kosong berikutnya muncul, tukar ruang pola dan ruang tahan, dan cetak ruang pola. yaitu baris pertama yang tidak kosong akan dicetak dan baris kedua akan ditahan. Dan pada siklus berikutnya, baris ke-2 yang tidak kosong dicetak saat baris ke-3 ditahan dan seterusnya seperti ini.
  3. Ketika baris kosong datang (baris sebelumnya ke baris kosong akan tersedia di buffer tahan) cukup tukar pola dan tahan spasi, dan hapus baris (baris terakhir paragraf) dan mulai siklus berikutnya.

6. Untuk setiap baris, tambahkan baris sebelumnya ke akhir menggunakan Perintah Sed

$ sed 'H;x;s/^\(.*\)\n\(.*\)/\2\1/' thegeekstuff.txt
#Linux
        Administration#Linux
        Scripting        Administration
        Tips and Tricks        Scripting
        Tips and Tricks
#Windows
        Administration#Windows
        Administration
#Database
        Mysql#Database
        Oracle        Mysql
        Queries Oracle
        Procedures                      Queries

Dalam contoh ini,

  1. Tempatkan baris pertama di Hold buffer.
  2. Saat baris kedua muncul, tambahkan ke Tahan spasi (baris pertama)
  3. Kemudian tukar pola dan tahan buffer. Jadi sekarang ruang pola akan memiliki baris pertama dan kedua yang dipisahkan oleh \n, Ruang penahan hanya akan memiliki baris kedua.
  4. Jadi, tukarkan garis di ruang pola.
  5. Langkah-langkah di atas terjadi hingga akhir file

7. Tambahkan tag setiap blok ke setiap baris blok itu

$ sed '
/^#/{
h
d
}
G
s/^\(.*\)\n#\(.*\)/\2 \1/' thegeekstuff.txt
Linux         Administration
Linux         Scripting
Linux         Tips and Tricks
Linux
Windows         Administration
Windows
Database         Mysql
Database        Oracle
Database        Queries
Database        Procedures

Dalam contoh ini,

  1. Ketika baris pertama dari sebuah blok terpenuhi (diawali dengan #)
    • simpan baris itu ke Hold Space melalui perintah `h'
    • Kemudian hapus menggunakan 'd' untuk memulai siklus lain.
  2. Untuk sisa baris blok, Command `G' menambahkan tag line dari Hold Space dan perintah pengganti menggantikan tag dan baris dengan benar.

Linux
  1. Panduan Bash For Loop dan Contohnya

  2. Contoh Bash For Loop dan While Loop

  3. Konsep 'Hold space' dan 'Pattern space' di sed

  1. Tutorial Perintah Linux ln untuk Pemula (5 Contoh)

  2. Tutorial Perintah Linux nl untuk Pemula (7 Contoh)

  3. Tutorial Perintah Linux nm untuk Pemula (10 Contoh)

  1. Tutorial Perintah OD Linux untuk Pemula (6 Contoh)

  2. Tutorial Perintah Linux which dan whoami untuk Pemula (dengan Contoh)

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