Es gibt viele Variationen der Syntax regulärer Ausdrücke . Die allerersten Tools in der Unix-Welt, die reguläre Ausdrücke hatten, verfügten nicht über die vollen Funktionen regulärer Ausdrücke, sondern nur über Zeichensätze ( […]
und .
), Wiederholungen ( *
) und Linienanker ( ^
und $
). Grundlegende reguläre Ausdrücke haben nur diese Operatoren. Sed ist ein Werkzeug der alten Schule und verwendet grundlegende reguläre Ausdrücke.
Viele sed-Implementierungen verfügen über Erweiterungen für den vollständigen regulären Ausdruck. Da der Charakter |
für sich selbst steht, müssen Sie ihn \|
zur Abwechslung und ähnlich \(
und \)
zur Gruppierung verwenden. Beachten Sie, dass der POSIX-Standard nicht vorschreibt, \|
dass er in regulären Grundausdrücken unterstützt wird , und dass einige Systeme (z. B. OpenBSD ) ihn nicht haben.
Einige Versionen von sed haben eine Option wechseln erweiterte reguläre Ausdrücke , in denen (…)
für die Gruppierung und verwendet wird |
für Abwechslung. Übergeben Sie die -r
Option mit GNU sed (dh unter Linux oder Cygwin) oder Busybox . Übergeben Sie unter FreeBSD oder OSX die -E
Option.
Wenn Ihr Sed keinen Wechsel hat, können Sie awk
stattdessen anrufen . Es wird von POSIX vorgeschrieben , ist jedoch für diese Aufgabe etwas ausführlich und unterstützt keine Rückreferenzen.
awk '{gsub(/foo|bar/, "narf")}' <fileName.old >fileName.new
Übrigens unterstützen nur GNU und Busybox sed das Ersetzen von Dateien. Awk und andere Versionen von sed tun dies nicht. Siehe Kann ich eine Datei an einer Stelle ändern?
Wenn Sie über Perl verfügen, ist dies für die Textverarbeitung von Einzeilern häufig praktisch. Das meiste, was in sed, awk und dem Rest einfach ist, ist in Perl nicht viel schwieriger, und Sie können ein einziges (wenn auch komplexes) Werkzeug erlernen.
perl -i -pe 's/foo|bar/narf/g' fileName