RE-Fehler: Wiederholungsoperator-Operand ungültig

RE-Fehler: Wiederholungsoperator-Operand ungültig

Ich erhalte diesen Fehler

RE-Fehler: Wiederholungsoperator-Operand ungültig

Unter FreeBSD sed mit csh.

Der Befehl lautet:

sed -rn 's/.*?VIEW ([^\s]+?) (AS .*?)\s([^\s]+?)\s([^\s]+?)/DROP VIEW \1;\nCREATE VIEW \1 \2;/p'

Ich habe gesehendiese Frageaber ich habe kein *+s, aber ich habe einige *?s, aber das soll nicht gierig bedeuten. Was mache ich falsch?

Antwort1

Es wurde bereits in den Kommentaren zur Frage erwähnt, aber um die Antwort deutlicher zu machen:

In sed ist die nicht gierige Übereinstimmung weder im Standard- noch im erweiterten Regex-Modus verfügbar.

Wenn Sie das Zeichen kennen, das die Übereinstimmung beenden soll, können Sie die folgende Technik verwenden, die Sie hier finden:https://0x2a.at/blog/2008/07/sed--non-greedy-matching/

Greedy-Matching:

$ echo "<b>foo</b>bar" | sed 's/<.*>//g'
bar

Nicht gieriges Matching:

$ echo "<b>foo</b>bar" | sed 's/<[^>]*>//g'
foobar

verwandte Informationen