vim - Masalah menggunakan ungkapan biasa untuk pemprosesan teks dengan vi/shell
黄舟
黄舟 2017-05-16 16:42:06
0
1
833

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)

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

membalas semua(1)
黄舟

ungkapan biasa vim

%s/\v((.).*\n)((.*\n)+)(.*$)//g

Terangkan dalam tiga perenggan

((.).*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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan