bir çift parantez arasındaki her şeyi silmek için bir astar sed?


15

İstemediğim parantez [] arasındaki şeylerle dolu bazı metinlerle çalışıyorum. Köşeli parantezleri kendim silebildiğim için, bunu yapmak için tek astara ihtiyacım yok, ancak aralarındaki her şeyi kaldıracak bir astara ihtiyacım var.

Parantez yerine parantez () ne olacak?

Yanıtlar:


20

[some text]Boş dize ile değiştirin . İç içe parantezleri ayrıştırmak istemediğinizi varsayarsak, parantez some textiçeremez.

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

Not braket ifadesinde o [^][]şey ama maç için [ya ], ]her şeyden önce gelmeli. Normalde a ]karakter kümesini bitirir, ancak kümedeki ilk karakter ise (burada, ^tamamlama karakterinden sonra ), ]kendini temsil eder.

Yuvalanmış köşeli ayraçları ayrıştırmak istiyorsanız veya köşeli ayraçlı metin birden çok satıra yayılabiliyorsa, sed doğru araç değildir.


teşekkürler, @Gilles ... btw, birden çok satıra yayılabilir, ancak satırlara katılmak için bir Perl betiği kullanıyorum ...
ixtmixilix

@ixtmixilix: Perl betiğiniz varsa, parantez içindeki metni de kaldırabilirsiniz. Perl'de yazabilirsiniz s/\[[^\[\]]*\]//g(yani karakter kümesinin üyelerinden kaçmak için ters eğik çizgiler kullanın).
Gilles 'SO- kötü olmayı bırak'

@Gilles tam olarak plz hakkında [^] [] hakkında daha fazla açıklayabilir misiniz? teşekkür ederim
Arash

1
@arashams […]= karakter kümesi. ^ilk karakter seti tamamlamak için anlamına gelir. ]normalde kümenin sonunu işaretler, ancak bunun dışındaki ilk karakter ise ^, sıradan bir karakterdir - boş bir kümeye veya boş kümenin tamamlanmasına izin verilmez. Sonra [sıradan ve ]set sona erer.
Gilles 'SO- kötü olmayı kes'

@Gilles yardımınız için tnx ama yine de anlamıyorum :( ne doz bu anlama geliyor? "^ İlk karakter seti tamamlamak için anlamına gelir" demek ne yapıyor? Örneğin tüm içeriklerle eşleşti mi?
Arash

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.