GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Müssen Regex-Zeichen in Sed maskiert werden, um als Regex-Zeichen interpretiert zu werden?

Es scheint z.B.
cat sed_data.txt | sed 's/b[0-9]{3}b/NUMBER/g'
das ich muss Escape-Zeichen, um einen regulären Ausdruck zu bilden. In diesem Fall musste ich geschweiften Klammern entkommen, um als Zahl interpretiert zu werden.
Warum? Ich hatte erwartet, dass alles ein Regex-Zeichen sein würde, wenn es nicht entkommen würde. D.h. im Gegenteil.

Akzeptierte Antwort:

Das liegt daran, dass sed verwendet POSIX BREs (Basic Regular Expressions) im Gegensatz zu den EREs (Extended Regular Expressions), die Sie wahrscheinlich von Perl oder Freunden gewohnt sind.

Von sed(1) Manpage:

REGULAR EXPRESSIONS
       POSIX.2 BREs should be supported, but they aren't completely because of
       performance problems.  The n sequence in a regular expression  matches
       the newline character, and similarly for a, t, and other sequences.

Relevantes Zitat aus dem obigen Link:

Die Basic Regular Expressions- oder BRE-Variante standardisiert eine Variante ähnlich derjenigen, die vom traditionellen UNIX-Befehl grep verwendet wird. Dies ist so ziemlich die älteste Variante regulärer Ausdrücke, die heute noch verwendet wird. Eine Sache, die diese Variante auszeichnet, ist, dass die meisten Metazeichen einen umgekehrten Schrägstrich erfordern, um dem Metazeichen seine Note zu verleihen. Die meisten anderen Varianten, einschließlich POSIX ERE, verwenden einen umgekehrten Schrägstrich, um die Bedeutung von Metazeichen zu unterdrücken.

Wortlaut aus dem Kommentar von Craig Sanders zitiert:

Beachten Sie, dass Sie zumindest in GNU sed sed mit der Befehlszeilenoption -r oder –regexp-extended anweisen können, erweiterte reguläre Ausdrücke zu verwenden. Dies ist nützlich, wenn Sie vermeiden möchten, dass Ihr Sed-Skript durch übermäßiges Escapezeichen hässlich wird.


Linux
  1. Einen Regex extrahieren, der mit „sed“ übereinstimmt, ohne die umgebenden Zeichen auszugeben?

  2. Sed mit Sonderzeichen verwenden?

  3. Wie kann man Zeichen rekursiv durch sed ersetzen?

  4. Regulärer Ausdruck zum Auffinden doppelter Zeichen in Bash

  5. Warum verwendet sed nicht standardmäßig den erweiterten Regex-Modus?

Erste Schritte mit regulären Ausdrücken

Reguläre Ausdrücke in Grep (Regex)

Regex-Tutorial für Linux-Beispiele (Sed &AWK).

10 praktische Beispiele für Regex mit grep

Warum funktioniert `\d` nicht in regulären Ausdrücken in sed?

So verwenden Sie Lookahead, um Sonderzeichen in einem regulären Ausdruck auszuschließen