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.