GNU/Linux >> Belajar Linux >  >> Linux

Tutorial Unix Sed:Operasi File Multi-Baris dengan 6 Contoh Praktis

Sebagai bagian dari seri tutorial UNIX sed kami yang sedang berlangsung sebelumnya, kami membahas pencetakan, penghapusan, penggantian, penulisan file, perintah manipulasi file dll., dengan satu baris di ruang pola.

Pada artikel ini mari kita tinjau bagaimana melakukan operasi multi-baris di Sed.

Apakah Anda ingat metodologi kerja Sed yang kita pelajari di tutorial sed pertama kita?. Dalam artikel tersebut kami menjelaskan bahwa Sed membaca baris demi baris, menghapus baris baru yang tertinggal, menempatkan baris dalam buffer ruang pola, memproses sesuai perintah yang diberikan, dan mencetak ruang pola.

Jika Anda ingin menghapus semua baris baru dalam file, Anda tidak dapat menggunakan metode berikut. Karena baris baru sudah dihapus dan ditempatkan di ruang pola.

$ sed 's/\n//' filename or  $sed 's/\n/ENDOFLINE\n/' filename

Untuk situasi seperti ini sed multi-line sesuai. Sed memberikan perintah “N” untuk Operasi Multi-Baris.

Perintah N membaca baris berikutnya dari input, Tambahkan baris berikutnya ke ruang pola. Baris berikutnya dipisahkan dari ruang pola asli oleh karakter baris baru.

Mari kita buat file geekstuff.txt terlebih dahulu yang akan digunakan dalam semua contoh yang disebutkan di bawah.

$ cat thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)


Storage in Linux
Website Design
Website Design
Windows- Sysadmin, reboot etc.
$

Catatan: Ada dua baris kosong berturut-turut pada input di atas. ( baris ke-5 dan ke-6 ).

Contoh Sed 1. Menggabungkan Dua Garis Berturut-turut

$ sed -e '{
N
s/\n/ @ /
}' thegeekstuff.txt

Linux Sysadmin @ Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc. @ Security (Firewall, Network, Online Security etc)
 @
Storage in Linux @ Website Design
Website Design @ Windows- Sysadmin, reboot etc.

Pada contoh di atas,

  • Tanda kurung kurawal “{” dan “}” digunakan untuk mengelompokkan perintah. Tanda kurung kurawal dan perintah sed harus berada pada baris yang terpisah.
  • Sed membaca baris pertama dan menempatkannya di ruang pola, perintah N membaca baris berikutnya dan menambahkan dengan ruang pola yaitu baris pertama dipisahkan oleh baris baru. Jadi sekarang ruang pola akan memiliki baris pertama\nbaris kedua.
  • Substitusi berikutnya dari \n ke space@space dan ia mencetak konten ruang pola sebagai perilaku default sed. Jadi garis yang berurutan digabungkan dan dibatasi oleh ” @ “

Contoh Sed 2. Beri nomor pada setiap baris tidak kosong dari sebuah file

Seperti yang disebutkan dalam artikel kami sebelumnya, =adalah perintah untuk mendapatkan nomor baris dari sebuah file.

$ sed '/./=' thegeekstuff.txt | sed 'N; s/\n/ /'
1 Linux Sysadmin
2 Databases - Oracle, mySQL etc.
3 Databases - Oracle, mySQL etc.
4 Security (Firewall, Network, Online Security etc)

7 Storage in Linux
8 Website Design
9 Website Design
10 Windows- Sysadmin, reboot etc.
  • Perintah sed pertama mencetak nomor baris dan mencetak baris asli di baris berikutnya jika tidak kosong.( Jalankan dan lihat output dari perintah sed pertama).
  • Perintah sed berikutnya hanya menambahkan sepasang baris.

Contoh Sed 3. Hapus Dua Baris Kosong Berturut-turut dari Input

$ sed '/^$/{
N
/^\n$/d
}' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Website Design
Website Design
Windows- Sysadmin, reboot etc.

Jika baris kosong, baca dan tambahkan baris berikutnya, /^\n$/ mewakili, dua baris kosong,\n ditambahkan dengan perintah N. Kemudian hapus saja ruang pola dan mulai siklus berikutnya menggunakan perintah 'd'.

Contoh Sed 4. Hapus 2 Baris Terakhir dari sebuah file

Sebelum melihat contoh ini, Anda harus mengetahui dua perintah sed yang menarik.

  1. P – yang mencetak baris pertama dari ruang pola. (sampai \n pertama).
  2. D – Hapus baris pertama dari ruang pola. Kontrol kemudian diteruskan ke bagian atas skrip.
$ sed 'N;$!P;$!D;$d' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)

Storage in Linux
Website Design
  1. Membaca baris pertama dan menempatkannya di ruang pola.
  2. N perintah membaca baris berikutnya dan menambahkan ke ruang pola yang dipisahkan oleh baris baru. (Sekarang baris pertama\nbaris kedua)
  3. Jika tidak mencapai baris terakhir($), cetak baris pertama dan hapus baris pertama saja dari ruang pola. Kemudian siklus dimulai lagi.
  4. Seperti ini ia menggabungkan baris ke-2\n3, baris ke-3\n4 dan seterusnya.
  5. Akhirnya ketika memiliki baris ke-9\n10 dalam ruang pola, ia mencapai $ sehingga hanya menghapus ruang pola. ($!P dan $!D tidak akan dicetak dan dihapus jika $).

Contoh Sed 5. Cetak 2 Baris Terakhir dari sebuah file

$ sed '$!N;$!D' thegeekstuff.txt
Website Design
Windows- Sysadmin, reboot etc.

Di atas bergabung dan menghapus setiap baris hingga dua baris terakhir ada di ruang pola. Ketika mencapai $, mencetak ruang pola yang hanya memiliki dua baris terakhir.

Contoh Sed 6. Hapus Duplikat, Baris Berturut-turut dari file

Perintah di bawah ini memeriksa setiap baris yang bergabung dengan baris berikutnya, periksa apakah keduanya sama maka itu bukan ruang pola cetak (! P), hapus saja baris pertama dari ruang pola. Jadi hanya satu baris yang tersisa di ruang pola.

$ sed '$!N; /^\(.*\)\n\1$/!P; D' thegeekstuff.txt
Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)

Storage in Linux
Website Design
Windows- Sysadmin, reboot etc.

Linux
  1. Tutorial Perintah Awk Linux/UNIX dengan Contoh

  2. Tutorial Awk:Memahami Variabel Awk dengan 3 Contoh Praktis

  3. Tutorial Status Keluar Bash Shell dengan Contoh Praktis

  1. 17 Perintah Tar Berguna dengan Contoh Praktis di Linux

  2. Perintah Diff di Linux dengan Contoh

  3. Tutorial Perintah mktemp Dengan Contoh Untuk Pemula

  1. Tutorial Perintah Grep Dengan Contoh Untuk Pemula

  2. Panduan Perintah Sed Lengkap [Dijelaskan dengan Contoh Praktis]

  3. Penggunaan Perintah Linux dengan Contoh