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.


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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.