it-swarm.com.de

Warum erhalte ich den Fehler "fehlende Terminierung] für Zeichenklasse"?

Ich möchte mit sed eine Zeichenfolge mit Klammern abschneiden.

Wie vermeide ich einen Fehler, wenn ich einen String mit [ löschen möchte? Zum Beispiel:

$ echo '[Om/mystring' | grep -oP '(?<=[Om\\)\w+'
grep: missing terminating ] for character class
3
Josef Klimuk

Wie der Fehler fehlende Terminierung] für die Zeichenklasse bereits besagt, hat das Problem hier mit [ zu tun, dem Sie entkommen müssen. Andernfalls wird es von grep als Zeichenklasse verstanden.

Außerdem sagen Sie //, während Sie / anstelle von \ entsprechend Ihrer Eingabe verwenden möchten.

Alles in allem werden nach [Om/ eine Reihe von Wörtern ausgegeben:

$ echo '[Om/mystring' | \grep -oP '(?<=\[Om\/)\w+'
mystring
7
fedorqui

Sie erhalten den Fehler, weil [ ein Sonderzeichen in der Syntax für reguläre Ausdrücke ist und eine Zeichenklasse einführt. Um als Zeichenfolgenliteral behandelt zu werden, muss es maskiert werden, d. H. \[

Wenn Sie nur das [Om/ -Präfix entfernen möchten , ist es einfacher, ein Trennzeichen zu verwenden, das nicht im Muster enthalten ist:

$ echo '[Om/mystring' | sed 's;\[Om/;;'
mystring
6
steeldriver