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
sed
dapat 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
ex
yang dimulai dengana
diakhiri 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
'dd
Jumlah 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 ?
sed
atau ex
perintah bekerja).
r
perintah file read, untuk menyalin teks dari file lain, jika sumber untuk teks pengganti ada dalam file.