GNU/Linux >> Belajar Linux >  >> Linux

Panduan Perintah Sed Lengkap [Dijelaskan dengan Contoh Praktis]

Dalam artikel sebelumnya, saya menunjukkan penggunaan dasar Sed, editor aliran, pada kasus penggunaan praktis. Hari ini, bersiaplah untuk mendapatkan lebih banyak wawasan tentang Sed karena kami akan melakukan tur mendalam tentang model eksekusi sed.

Ini juga akan menjadi kesempatan untuk membuat tinjauan lengkap dari semua perintah Sed dan menyelami detail dan seluk-beluknya.

Jadi, jika Anda siap, luncurkan terminal, unduh file uji dan duduk dengan nyaman di depan keyboard Anda:kami akan memulai penjelajahan kami sekarang juga!

Sedikit teori tentang Sed

Tampilan pertama pada model eksekusi sed

Untuk benar-benar memahami Sed, Anda harus terlebih dahulu memahami model eksekusi alat.

Saat memproses data, Sed membaca satu baris input pada satu waktu dan menyimpannya ke dalam apa yang disebut ruang pola . Semua transformasi Sed berlaku untuk ruang pola. Transformasi dijelaskan oleh perintah satu huruf yang disediakan pada baris perintah atau dalam file skrip Sed eksternal. Sebagian besar perintah Sed dapat didahului dengan alamat, atau rentang alamat, untuk membatasi cakupannya.

Secara default, Sed mencetak konten ruang pola pada akhir setiap siklus pemrosesan, yaitu, tepat sebelum menimpa ruang pola dengan baris input berikutnya. Kita dapat meringkas model itu seperti itu:

  1. Cobalah membaca baris input berikutnya ke dalam ruang pola

Jika pembacaan berhasil:

  1. Terapkan dalam urutan skrip semua perintah yang alamatnya cocok dengan baris input saat ini
  2. Jika sed tidak diluncurkan dalam mode senyap (-n ) mencetak konten dari ruang pola (yang berpotensi dimodifikasi)
  3. kembali ke 1.

Karena isi ruang pola hilang setelah setiap baris diproses, itu tidak cocok untuk penyimpanan jangka panjang. Untuk tujuan itu, Sed memiliki buffer kedua, ruang penahan . Sed tidak pernah menghapus, menempatkan, atau mendapatkan data dari ruang penyimpanan kecuali Anda memintanya secara eksplisit. Kami akan menyelidikinya lebih dalam nanti saat mempelajari pertukaran, dapatkan dan tahan perintah.

Mesin abstrak Sed

Model yang dijelaskan di atas adalah apa yang akan Anda lihat dijelaskan dalam banyak tutorial Sed. Memang, cukup benar untuk memahami program Sed yang paling dasar. Tetapi ketika Anda mulai menggali perintah yang lebih maju, Anda akan melihat bahwa itu tidak cukup. Jadi, mari kita coba sedikit lebih formal sekarang.

Sebenarnya, Sed dapat dilihat sebagai mengimplementasikan mesin abstrak yang statusnya ditentukan oleh tiga buffer, dua register, dan dua flag:

  • tiga penyangga untuk menyimpan teks panjang sewenang-wenang. Ya:tiga ! Dalam model eksekusi dasar kita berbicara tentang pattern- dan hold-space, tetapi Sed memiliki buffer ketiga:tambahkan antrian . Dari perspektif skrip Sed, ini adalah buffer tulis-saja yang akan di-flush secara otomatis oleh Sed pada saat-saat eksekusi yang telah ditentukan (secara umum sebelum membaca baris baru dari input, atau sesaat sebelum berhenti).
  • Sed juga memelihara dua register :penghitung baris (LC) yang menampung jumlah baris yang dibaca dari input, dan program counter (PC) yang selalu memegang indeks ("posisi" dalam skrip) dari perintah berikutnya yang akan dieksekusi. Sed secara otomatis menambah PC sebagai bagian dari loop utamanya. Tetapi menggunakan perintah tertentu, skrip juga dapat langsung memodifikasi PC untuk melewati atau mengulang bagian program. Ini adalah bagaimana loop atau pernyataan kondisional dapat diimplementasikan dengan Sed. Selengkapnya di bagian cabang khusus di bawah ini.
  • Akhirnya dua bendera dapat mengubah perilaku perintah Sed tertentu:tanda cetak otomatis (AP) bendera pengganti (SF). Saat bendera cetak otomatis disetel , Sed akan secara otomatis mencetak isi dari ruang pola sebelum menimpanya (terutama sebelum membaca baris input baru tetapi tidak hanya). Saat bendera cetak otomatis jelas (“not set”), Sed tidak akan pernah mencetak konten dari ruang pola tanpa perintah eksplisit dalam skrip. Anda dapat menghapus tanda cetak otomatis dengan menjalankan Sed dalam “mode diam” (menggunakan -n opsi baris perintah atau dengan menggunakan komentar khusus#n pada baris pertama atau skrip). “Bendera substitusi” diatur oleh perintah substitusi (s command) ketika alamat dan pola pencariannya cocok dengan konten ruang pola. Bendera substitusi dihapus pada awal setiap siklus baru, atau ketika baris baru dibaca dari input, atau setelah cabang bersyarat diambil. Di sini sekali lagi, kita akan meninjau kembali topik itu secara mendetail di bagian cabang.

Selain itu, Sed mempertahankan daftar perintah yang telah memasuki rentang alamatnya (lebih lanjut tentang bagian rentang alamat) serta beberapa pegangan file untuk membaca dan menulis data. Anda akan menemukan beberapa informasi lebih lanjut tentang itu di deskripsi perintah baca dan tulis.

Baca cerita selengkapnya

Artikel selanjutnya hanya tersedia untuk anggota LHB Pro. Anda dapat mendaftar sekarang dengan bayaran $50 setahun untuk membaca sisa artikel ini dan mendapatkan akses GRATIS ke semua pos, eBook, dan kursus video khusus anggota.

BerlanggananSudah punya akun? Masuk
Linux
  1. Diurutkan dengan sort di baris perintah

  2. Multi-Tugas di baris perintah dengan screenie

  3. sed menyisipkan baris dengan spasi ke baris tertentu

  1. Memanipulasi teks pada baris perintah dengan sed

  2. Menggunakan beberapa pola sekaligus dengan perintah Sed

  3. Perintah mana di Linux [Dijelaskan dengan Contoh]

  1. Perintah Linux - Panduan Lengkap

  2. Perintah Gema dengan Contoh Praktis

  3. Konversikan string ke heksadesimal pada baris perintah