sed one-liner untuk menghapus semuanya antara sepasang tanda kurung?

15

Saya bekerja dengan beberapa teks yang penuh dengan hal-hal di antara tanda kurung [] yang tidak saya inginkan. Karena saya dapat menghapus tanda kurung sendiri, saya tidak perlu satu-liner untuk melakukan itu untuk saya, tetapi saya membutuhkan satu-liner yang akan menghapus semuanya.

Bagaimana dengan tanda kurung () bukan kurung?

ixtmixilix
sumber

Jawaban:

20

Ganti [some text]dengan string kosong. Dengan asumsi Anda tidak ingin mengurung tanda kurung bersarang, yang some texttidak dapat mengandung tanda kurung.

sed -e 's/\[[^][]*\]//g'

Perhatikan bahwa dalam ekspresi braket [^][]untuk mencocokkan apa pun kecuali [atau ], ]harus didahulukan. Biasanya a ]akan mengakhiri set karakter, tetapi jika itu karakter pertama dalam set (di sini, setelah ^karakter komplementasi), ]singkatan dari dirinya sendiri.

Jika Anda ingin menguraikan tanda kurung bersarang, atau jika teks kurung dapat menjangkau beberapa baris, sed bukan alat yang tepat.

Gilles 'SO- berhenti menjadi jahat'
sumber
terima kasih, @Gilles ... btw, ini dapat menjangkau beberapa baris, tapi saya menggunakan skrip Perl untuk bergabung dengan baris ...
ixtmixilix
@ixtmixilix: Jika Anda memiliki skrip Perl, Anda dapat membuatnya menghapus teks kurung juga. Di Perl, Anda dapat menulis s/\[[^\[\]]*\]//g(yaitu menggunakan garis miring terbalik untuk keluar dari anggota set karakter).
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles dapatkah Anda menjelaskan lebih lanjut tentang [^] [] tepatnya tlg. terima kasih
Arash
1
@arashams […]= set karakter. ^sebagai karakter pertama berarti melengkapi set. ]biasanya akan menandai akhir dari himpunan, tetapi jika itu karakter pertama selain ^, itu adalah karakter biasa - himpunan kosong atau pelengkap himpunan kosong tidak diizinkan. Maka [biasa dan] mengakhiri set.
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles tnx untuk bantuan Anda tetapi masih saya tidak mengerti :( dosis apa artinya itu? "^ Sebagai karakter pertama berarti melengkapi set" maksud saya apa yang dilakukannya? Misalnya apakah itu cocok dengan semua konten?
Arash
9

Perintah sed -e 's/([^()]*)//g'akan melakukan kurung, bukan kurung.

ixtmixilix
sumber