Ersetzen:
%Vor%Mit:
%Vor% Gemäß man bash
unterstützt der Operator =~
"erweiterte reguläre Ausdrücke" wie in man 3 regex
definiert. man 3 regex
sagt, es unterstützt den POSIX-Standard und verweist den Leser auf man 7 regex
. Der POSIX-Standard unterstützt [:space:]
als Zeichenklasse für Leerzeichen.
Das GNU bash
Handbuch dokumentiert die unterstützten Zeichenklassen wie folgt:
Innerhalb von '[' und ']' können Zeichenklassen mit Hilfe von Syntax [: Klasse :], wobei Klasse eine der folgenden definierten Klassen ist im POSIX-Standard:
alnum alpha ascii blank cntrl Zifferngrafik niedrigerer Druck
punct space oberes Wort xdigit
Die einzige Erwähnung von \s
, die ich in der GNU bash
-Dokumentation gefunden habe, war für eine nicht verwandte Verwendung in Aufforderungen wie PS1
, nicht in regulären Ausdrücken.
*
[[:space:]]
entspricht genau einem Leerzeichen. [[:space:]]*
entspricht null oder mehr Leerzeichen.
space
und blank
POSIX reguläre Ausdrücke bieten zwei Whitespace-Klassen: [[:space:]]
und [[:blank:]]
:
[[:blank:]]
bedeutet Leerzeichen und Tabulator. Dies macht es ähnlich wie: [ \t]
.
[[:space:]]
enthält neben Space und Tab auch Newline, Linefeed, Formfeed und Tab vertikal. Dies macht es ähnlich wie: [ \t\n\r\f\v]
.
Ein Hauptvorteil der Verwendung von Zeichenklassen ist, dass sie für Unicode-Zeichensätze sicher sind.
Entfernen Sie die eckigen Klammern im regulären Ausdruck:
%Vor% Wenn die eckigen Klammern vorhanden sind, wird \s
inside wörtlich als übereinstimmend mit den Zeichen \
oder s
interpretiert, aber Ihre Absicht ist eindeutig mit der Leerraum-Zeichenklasse zu vergleichen, für die \s
eine Kurzschrift ist (und daher keine eckigen Klammern).