Hi, On Tue, 19 Aug 2008, Lentes, Bernd wrote:
From: Christian Brabandt [mailto:cblists@256bit.org] Sent:
vi -c "%s/foo/bar/g|x" file
Jetzt hab ich mir den vimtutor reingezogen, sowie vim.org durchstöbert, aber nirgendwo gefunden, was das abschließende |x in obiger Zeilge bedeuten soll. Kannst Du mich erleuchten ?
Es sind mehrere Kommandos. Das x sorgt für das Speichern. Mit | werden mehrere (Ex-) Kommandos abgetrennt, x steht für :exit. Also interaktiv in Vi folgendermaßen: vi datei (öffne Datei) :%s/foo/bar/g (ersetze alle Vorkommen von foo durch bar) :x (beende und speichere, falls sich was geändert hat) Diese Lösung war übrigens nicht ganz Ernst gemeint. Sie sollte nur zeigen, dass man jeden vi-Clone auch als sed/Perl/awk Ersatz nutzen kann. Daher nutzt es nur Kommandos, die jeder vi-Clone verstehen sollte und daher portabel sein sollte. Ich würde es ohnehin interaktiv machen. Da kann man relativ leicht überprüfen, ob der reguläre Ausdruck passt (bzw. bei Fehlern relativ leicht rückgängig machen) und dann alles Ersetzen. Vorteil von Vim hier, es kann auch erweiterte reguläre Ausdrücke (siehe Thread von vor ein paar Tagen) und man kann auch interaktiv eine große Menge an Dateien schnell verarbeiten. Hin und wieder muß ich z.B. in allen xml-Dateien im aktuellen Verzeichnis einen Text ersetzen. (Sed/awk/perl ist hier auf Windows nicht vorhanden.) Das mache ich dann so: :args *.xml (alle xml-Dateien der Argumentenliste hinzufügen) :argdo :%s/foo/bar/g|upd (in jeder xml-Datei ersetze foo durch bar und speichere hinterher die Datei, falls sie geändert worden ist) Und dann schaue ich zu, wie Vim losrattert ;) David wird mir wahrscheinlich jetzt eine viel schnellere, ressourcenschonendere und portablere Perl-Lösung um die Ohren hauen. Die würde ich wahrscheinlich selber hinkriegen, aber bis ich soweit bin, habe ich die xml-Dateien schon 3 Mal weiterverarbeitet ;) Für Dateien, die größer als mehrere MB sind, würde ich auch zu einer Perl Lösung greifen. Wer schonmal versucht hat, eine Datei im Vim zu öffnen, die größer ist als der verfügbare RAM, weiß wovon ich spreche. Mit freundlichen Grüßen Christian -- hundred-and-one symptoms of being an internet addict: 231. You sprinkle Carpet Fresh on the rugs and put your vacuum cleaner in the front doorway permanently so it always looks like you are actually attempting to do something about that mess that has amassed since you discovered the Internet. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org