Mengganti beberapa baris dalam sed atau awk [ditutup]

9

Saya mencoba menggunakan sed atau awk untuk mengganti 5 baris dalam file seseorang tetapi saya tidak tahu bagaimana menghadapi baris baru.

glisignoli
sumber
6
Tentu saja, sed dan awk dapat melakukan ini, tetapi saya mengalami sedikit kesulitan memahami dengan tepat apa pertanyaan Anda. Apa yang sebenarnya menyebabkan Anda kesulitan? Memasukkan baris baru? Menggantinya?
frabjous

Jawaban:

19

Sed cukup buruk dalam hal ini, karena beroperasi satu baris pada satu waktu. Satu-satunya teknik yang layak yang pernah saya lihat untuk melakukan ini adalah ini , yang melibatkan menyimpan seluruh file dalam buffer hold sed dan kemudian mengoperasikannya sekaligus:

sed -n '1h;1!H;${g;s/search/replace/;p;}'

Jika Anda bisa, lebih mudah menggunakan perl untuk mencapai ini:

perl -0pe 's/search/replace/'

searchdapat berisi \ns untuk mewakili baris baru

Michael Mrozek
sumber
1
+1 untuk sedmultiliner.
Lazer
Bisakah Anda jelaskan apa yang diperintahkan oleh perintah baris untuk perl?
Michael
1
@Michael -0mengatur pemisah rekaman ke nol, sehingga seluruh file akan dibaca sekaligus, bukan baris demi baris. -pmembuatnya mencetak hasil setelah penggantian. -ememinta argumen berikutnya untuk diekspresikan, dan s/search/replace/apakah ungkapan itu
Michael Mrozek