Mit VI wie kann ich nach der folgenden Anweisung suchen und ersetzen?
Frage
Ich muss Folgendes ersetzen:
CREATE TABLE /*!32312 IF NOT EXISTS*/ `access`
zu
CREATE TABLE IF NOT EXISTS `access`
ich habe es versucht
:%s/\/\*\!\d+(.*)\*\//\1/g
Aber das schien nicht zu gehen. Was mache ich falsch?
Lösung
VIM benötigt einen Backslashing + (oder verwenden Sie stattdessen *). Außerdem müssen Sie die Gruppierung von Klammern in Vim zurückbiegen. Daher:
:%s/\/\*\!\d\+\(.*\)\*\//\1/g
Ja, Vims Old-Stil-Regexes saugen:/
Bearbeiten: Wie in den Kommentaren unten erwähnt, funktioniert +, wenn sie als + entkommen. Und d tatsächlich wird unterstützt, oops. Bearbeitet das Beispiel Regex, um dies zu korrigieren. Siehe auch Brian Carpers Beispiel für eine prägnantere und lesbare Version.
Andere Tipps
Verwenden Sie "sehr magisch" und verwenden Sie andere Abgrenzer als die Standardeinstellung, um dies zu erleichtern (und erinnern Sie sich).
:%s@\v/\*!\d+(.*)\*/@\1@g
Ohne "sehr magisch" muss man einen Backslash vorstellen +
und ()
(aber nicht vor *
oder einige andere Dinge). Es ist nicht sehr konsequent.
Etwas anders und effizienter mit [^*]+ :-)
1,$s/\v\/\*\!\d+\s*([^*]+)\*\//\1