Rumah > Soal Jawab > teks badan
Syaratnya adalah seperti berikut:
Input fail input.txt:
a1
a2
a3
a4
b1
b2
a5
b3
b4
b5
Fail output yang diperlukan output.txt ialah:
a1
a4
b1
b2
a5
b3
b5
Iaitu, keluarkan baris N. Syarat yang N penuhi ialah: huruf pertama baris N dan baris N-1 dan N+1 adalah sama (baris pertama dan terakhir tidak dialih keluar).
Bolehkah saya menggunakan arahan penggantian atau shell untuk mencapai keperluan ini. Saya juga ingin memberi anda beberapa petua. (Saya telah melaksanakannya menggunakan C++, sekarang saya hanya ingin tahu sama ada ia boleh dilaksanakan menggunakan ungkapan biasa)
黄舟2017-05-16 16:44:06
%s/\v((.).*\n)((.*\n)+)(.*$)//g
((.).*n)
Padankan baris pertama, kumpulan luar digunakan untuk rujukan belakang apabila menggantikan, dan kumpulan dalam digunakan untuk penghakiman seterusnya
((2.*n)+)
Padankan baris seterusnya bermula dengan huruf pertama baris sebelumnya (1 atau lebih baris)
(2.*$)
Memadankan baris yang bermula dengan huruf pertama baris pertama
15 terakhir menggantikan semua baris yang dipadankan di atas dengan baris pertama dan terakhir, iaitu padam garis tengah
Nota: V awal adalah untuk beralih ke mod biasa perl, supaya tanda kurung dan tanda tambah tidak perlu dilepaskan
BTW Adalah paling mudah untuk menggunakan skrip perl untuk menyelesaikan kerja pemprosesan teks jenis ini Kelebihan vi ialah penyahpepijatan visual, tetapi ia adalah GG apabila menemui fail besar