Saya harus mengganti blok besar teks (kode skrip shell) dalam file dengan blok teks lain.
Saya terkesan dengan Bagaimana saya bisa menggunakan sed untuk mengganti string multi-line? dijawab oleh antak dan Multi-line replace dijawab oleh Bruce Ediger
Tetapi saya memiliki beberapa kesulitan dalam menggunakannya.
antak sudah disebutkan dalam jawabannya bahwa streaming seluruh file (
1h;2,$H;$!d;g;) ke buffer tidak disarankan untuk file besar, karena kelebihan memori.Saya tahu
seddapat digunakan dengan fitur blok untuk mempertahankan teks di luar blok tidak berubah. Saya ingin menggunakan fitur ini. Tetapi jika saya menggunakan,sed -i '/marker1/,/marker2/s/.*/new text (code)/' filename
itu akan menyisipkan teks (kode) baru berulang kali untuk setiap aliran. Karenanya saya harus membuat blok visual sebagai satu aliran, menggunakan sesuatu yang mirip dengan apa yang disarankan oleh antak sebelumnya, tetapi untuk blok (bukan untuk seluruh file).
Seperti yang disebutkan oleh Bruce Ediger, append fitur
exyang dimulai denganadiakhiri dengan.(titik) dapat dicoba, tetapi teks baru saya (kode) berisi baris dimulai dengan titik, yang dapat dianggap sebagai titik sintaks append. Bagaimana saya bisa menggunakannya dalam situasi ini?ex'ddJumlah baris' dapat menghapus banyak baris, tetapi jika saya memiliki blok antara / marker1 / dan / marker2 / dengan jumlah baris yang tidak diperbaiki (bervariasi) harus diganti dengan teks (kode) baru, bagaimana caranya Itu ?
sedatau experintah bekerja).
rperintah file read, untuk menyalin teks dari file lain, jika sumber untuk teks pengganti ada dalam file.