Ich habe eine große HTML-Datei mit vielen Markups, die so aussehen:
<p class="MsoNormal" style="margin: 0in 0in 0pt;">
<span style="font-size: small; font-family: Times New Roman;">stuff here</span>
</p>
Ich versuche, ein Vim-Suchen und -Ersetzen durchzuführen, um alle class=""
Und style=""
Zu entfernen, aber ich habe Probleme, das Streichholz ungleichmäßig zu machen.
Mein erster Versuch war dies
%s/style=".*?"//g
aber Vim scheint den ?
nicht zu mögen. Leider macht das Entfernen des ?
Das Match zu gierig.
Wie kann ich mein Streichholz ungreif machen?
Anstatt .*
verwenden .\{-}
.
%s/style=".\{-}"//g
Siehe auch :help non-greedy
Die nicht gierige Suche in vim erfolgt mit dem Operator {-}. So was:
%s/style=".\{-}"//g
versuch's einfach:
:help non-greedy
Was ist falsch mit
%s/style="[^"]*"//g
Wenn Sie sich mit PCRE-Regex-Syntax besser auskennen, welche
wenn Sie [g] vim mit der Perl-Funktion kompiliert haben, testen Sie mit
: Merkmale prüfen und überprüfen; Wenn + Perl da ist, kann es losgehen.
versuchen Sie es mit Suchen/Ersetzen
:perldo s///
Beispiel. Swap src und alt Attribute img Tag:
<p class="logo"><a href="/"><img src="/caminoglobal_en/includes/themes/camino/images/header_logo.png" alt=""></a></p>
:perldo s/(src=".*?")\s+(alt=".*?")/$2 $1/
<p class="logo"><a href="/"><img alt="" src="/caminoglobal_en/includes/themes/camino/images/header_logo.png"></a></p>
Ich habe festgestellt, dass eine gute Lösung für diese Art von Frage ist:
:%! sed ...
(oder Perl, wenn Sie bevorzugen). IOW, anstatt die regulären Ausdrücke von vim zu lernen, verwenden Sie ein Tool, das Sie bereits kennen. Mit Perl würde das? Modifikator-Arbeit, um das Match zu entgräten.
Mit \v
(wie in mehreren Kommentaren vorgeschlagen)
:%s/\v(style|class)\=".{-}"//g
Plugin eregex.vim behandelt nicht-gierige Perl-Operatoren *?
und +?