Einzeiler, um alles zwischen zwei Klammern zu löschen?


15

Ich arbeite mit einem Text, der voll ist mit Dingen in Klammern [], die ich nicht will. Da ich die Klammern selbst löschen kann, brauche ich keinen Einzeiler, um das für mich zu tun, aber ich brauche einen Einzeiler, der alles zwischen ihnen entfernt.

Was ist mit Klammern () anstelle von Klammern?

Antworten:


20

Ersetzen Sie [some text]durch die leere Zeichenfolge. Angenommen, Sie möchten keine geschachtelten Klammern analysieren, some textdürfen diese keine Klammern enthalten.

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

Beachten Sie, dass im Klammerausdruck [^][], um etwas anderes als [oder zu finden ], das ]zuerst kommen muss. Normalerweise ]würde a den Zeichensatz beenden, aber wenn es das erste Zeichen im Satz ist (hier nach dem ^Komplementierungszeichen), ]steht das für sich.

Wenn Sie geschachtelte Klammern analysieren möchten oder wenn der Text in Klammern mehrere Zeilen umfassen kann, ist sed nicht das richtige Werkzeug.


danke, @Gilles ... übrigens, es kann mehrere Zeilen umfassen, aber ich verwende ein Perl-Skript, um Zeilen zu verbinden ...
ixtmixilix

@ixtmixilix: Wenn Sie ein Perl-Skript haben, können Sie festlegen, dass es auch den in Klammern stehenden Text entfernt. In Perl können Sie schreiben s/\[[^\[\]]*\]//g(dh Backslashes verwenden, um den Mitgliedern des Zeichensatzes zu entgehen).
Gilles 'SO- hör auf böse zu sein'

@ Gilles könntest du mehr über [^] [] genau erklären plz. Vielen Dank
Arash

1
@arashams […]= Zeichensatz. ^als erstes Zeichen bedeutet, die Menge zu ergänzen. ]würde normalerweise das Ende des Satzes markieren, aber wenn es das erste andere Zeichen als ist ^, ist es ein gewöhnliches Zeichen - ein leerer Satz oder die Ergänzung des leeren Satzes ist nicht zulässig. Dann [ist normal und ]beendet den Satz.
Gilles 'SO- hör auf böse zu sein'

@ Gilles TNX für Ihre Hilfe, aber ich verstehe es immer noch nicht :( Welche Dosis bedeutet das? "^ Als erstes Zeichen bedeutet es, das Set zu ergänzen" Ich meine, was macht es? Zum Beispiel ist es auf alle Inhalte abgestimmt?
Arash

10

Der Befehl sed -e 's/([^()]*)//g'macht Klammern anstelle von Klammern.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.