Contoh:
This is {
the multiline
text file }
that wants
{ to be
changed
} anyway.
Harus menjadi:
This is
that wants
anyway.
Saya telah menemukan beberapa utas yang serupa di forum, tetapi tampaknya tidak bekerja dengan tanda kurung multi-line.
Jika memungkinkan, saya lebih suka metode satu garis, seperti solusi berdasarkan grep, sed, awk ... dll.
EDIT: Solusi tampaknya baik-baik saja, tetapi saya perhatikan bahwa file asli saya termasuk kurung kurawal bersarang. Jadi saya membuka pertanyaan baru. Terima kasih semuanya: Bagaimana saya bisa menghapus semua teks di antara kurung keriting bersarang dalam file teks multiline?
text-processing
sed
awk
grep
Sopalajo de Arrierez
sumber
sumber
sed '/{/{:1;N;s/{.*}//;T1}' multiline.file
Jawaban:
Penjelasan:
:again;$!N;$!b again;
Ini membaca seluruh file ke dalam ruang pola.
:again
adalah label.N
membaca di baris berikutnya.$!b again
cabang kembali keagain
label dengan syarat bahwa ini bukan baris terakhir.s/{[^}]*}//g
Ini menghapus semua ekspresi dalam kurung kurawal.
Di Mac OSX, coba:
Kawat Gigi Bersarang
Mari kita ambil ini sebagai file uji dengan banyak kawat gigi bersarang:
Berikut ini adalah modifikasi untuk menangani kawat gigi bersarang:
Penjelasan:
:again;$!N;$!b again
Ini sama dengan sebelumnya: ia membaca di seluruh file.
:b
Ini mendefinisikan label
b
.s/{[^{}]*}//g
Ini menghapus teks dalam kawat gigi selama teks tidak mengandung kawat gigi dalam.
t b
Jika perintah pengganti di atas menghasilkan perubahan, lompat kembali ke label
b
. Dengan cara ini, perintah pengganti diulangi sampai semua brace-groups dihilangkan.sumber
EDIT
) tidak persis sama, saya pikir Anda harus menjawabnya juga. Apakah boleh dengan aturan forum?Perl:
Jika Anda ingin mengedit di tempat
Itu membaca file sebagai string tunggal dan melakukan pencarian global dan ganti.
Ini akan menangani penguat bersarang:
sumber
Sed:
mulai sejak baris dengan
{
dan dapatkan baris berikutnya (N
) sampai substitusi ({}
) dapat dibuat (T
berarti kembali ke tanda yang dibuat oleh:
jika substitusi tidak dibuat)Sedikit memodifikasi untuk menjadi kenyataan jika banyak kurva yang di-kurung dalam satu baris
Hapus semua simbol dalam tanda kurung (
[^}]
sama dengan setiap simbol kecualiright bracket
untuk membuatsed
tidak serakah), dan jika di baris tetapleft bracked
- kembali untuk memulai dengan baris berikutnya ditambahkan jika tidak adaright bracket
.sumber