Saya punya file dengan pola berikut:
foo 111
baz
foo 222
baz
foo 333
baz
yang perlu diubah menjadi
foo 111
bar 111
baz
foo 222
bar 222
baz
foo 333
bar 333
baz
Jadi, duplikat semua baris yang dimulai dengan foo
, dan ubah hanya foo
dalam duplikat tetapi biarkan sisa baris (yang berbeda dalam setiap kasus) utuh. Bagaimana cara melakukannya?
regular-expression
search
LB7979
sumber
sumber
Jawaban:
Ini dia:
Membusuk:
Karena
g
perintah akan memperbarui pola pencarian, sehingga Anda dapat menghilangkan pola untuk menggantikan dalam perintah pengganti. (ref:,:h :g
carisearch pattern
).Versi yang lebih lama:
Membusuk:
Untuk memasukkan
^M
pers Ctrl+vdan enter.Catatan : Saya awalnya datang dengan versi "lebih lama", sebelum saya belajar tentang
t
perintah. Saya akan meninggalkannya tetapi saya tidak akan merekomendasikan menggunakannya. Yang pertama lebih bersih lebih mudah.sumber
foo
....^M
seperti yang saya jelaskan?t
, dan kemudian saya menambahkan yang kedua. Saya akan mengubah urutan, Anda benar. Bagaimana dengan yang pertama adalah POSIX?Saya melakukan hal-hal seperti ini sepanjang waktu dan hanya melakukan sesuatu seperti
%s/^foo \(.*\)/foo \1\rbar \1/
(sebagian karena saya juga melakukan banyak tugas serupa yang tidak dapat diubah menjadi sesuatu yang pintar menggunakan fungsi penyalinan, dan sekarang\(.*\)
menjadi bagian dari memori otot saya).Saya curiga ini bukan POSIX-compliant (tidak bekerja pada klon vi lain), tetapi menggunakan
^M
( C-VReturn) alih-alih\r
tampaknya berfungsi pada sebagian besar klon vi lainnya.sumber