Menggunakan BSD sed
;
Bagaimana saya bisa melakukan substitusi berikut?:
Sebelumnya:
hello hello hello
hello hello hello
Setelah:
hello world hello
hello hello hello
Dengan kata lain; bagaimana saya bisa mengganti hanya yang T yang kejadian dari suatu pola?
(Atau dalam hal ini; yang 2 dan kejadian dari suatu pola?)
Jawaban yang Diterima:
Dengan POSIX sed
:
$ sed -e'/hello/{' -e:1 -e'$!N;s/hello/world/2;t2' -eb1 -e\} -e:2 -en\;b2 <file
hello world hello
hello hello hello
-
Setelah pertandingan pertama
/hello/
, kita mengalami loop. -
Lingkaran dalam
:1
, kita membaca setiapN
ext line ke ruang pola, lakukans
perintah pengganti untuk2
nd kejadian saja. Kamit
est jika substitusi berhasil atau tidak. Jika ya, kita mengalami loop:2
, jika tidak, ulangi loop denganb1
. -
Lingkaran dalam
:2
, kami hanya mencetak baris yang tersisa sampai akhir file.
Perhatikan bahwa pendekatan ini akan menyimpan semua hal di antara dua halo dalam ruang pola. Ini akan menjadi masalah dengan file besar, ketika yang pertama dan yang kedua berjauhan.