So ersetzen Sie Zeilenenden in VIM

8

Wie kann ich alle Zeilenenden in einer großen Datei (& gt; 100 MB) ersetzen? Ich habe versucht zu tun

:%s/\n/, /g

aber es ist zu langsam.

    
Frankovskyi Bogdan 04.03.2010, 14:37
quelle

6 Antworten

8

Also habe ich einige der Antworten, die von anderen Leuten gegeben wurden, durchgetestet und getestet / getimt, plus eine Python-Antwort von mir. Hier ist, was ich habe:

tr:

%Vor%

python:

%Vor%

awk:

%Vor%

perl:

%Vor%

sed:

%Vor%

Hier ist die Datei, die ich benutzt habe:

%Vor%

Ursprünglich wurden die Timings in Cygwin aufgenommen, sie wurden nun mit vollständig aktualisiertem Ubuntu 9.10 aufgenommen. Außerdem wurde die Textdateigröße auf 100 MB mit 80 Zeichen breiten Zeilen erhöht. Wie Sie sehen können, ist alles andere als sed eine gute Idee.

    
Seamus Connor 05.03.2010, 00:46
quelle
3

:%s/$/, / gefolgt von :1,$j könnte schneller sein. Andernfalls tun Sie es in einem externen Dienstprogramm:

%Vor%

Ich weiß nicht von oben, was am schnellsten wäre.

    
Cascabel 04.03.2010 14:42
quelle
2

Verwenden Sie dieses Perl-Skript, um Ihre Datei zu durchsuchen; es wäre schneller, als alles mit VIM im Speicher zu halten. Verteilen Sie die Ausgabe einfach an eine neue Datei.

%Vor%     
OverClocked 04.03.2010 14:40
quelle
0

Müssen Sie das in vim machen?

Es gibt ein nettes Unix-Programm, das auf Zeichen basiert. Es heißt tr . Einige Referenzen .

In Ihrem Fall wäre es:

%Vor%     
pajton 04.03.2010 14:40
quelle
0

Das beste Werkzeug ist sed und du kannst es benutzen mit:! Befehl

Verwenden Sie also :!sed -e 's/\n/,/g' % > %.tmp ; cat %.tmp > % ; rm %.tmp'

Sie müssen eine tmp-Datei mit Änderung erstellen, bevor Sie sie in Ihre aktuelle Datei integrieren

    
shingara 04.03.2010 17:16
quelle
0
%Vor%     
ghostdog74 04.03.2010 15:06
quelle

Tags und Links