Ich habe eine große Textdatei (ca. 2 GB). Ich möchte fünf Such- und Ersetzungsaktionen für dieselbe Datei ausführen und möchte dies in einem Befehl ausführen. Normalerweise benutze ich vim, öffne die Datei, führe eine Ersetzungsaktion aus, dann die nächste usw. Es gibt einen Haken, da ich festgestellt habe, dass vim nach drei oder vier Suchvorgängen aufgrund von Speicherproblemen abstürzt.
Hier sind zwei Beispiele für den Befehl, den ich in Vim verwende:
:%s/www\.abcdef/www.test.abcdef/g
:%s/www\.klmnop/www.test.klmnop/g
Was ist der beste Weg, um damit umzugehen?
linux
vim
sed
find-and-replace
SPRBRN
quelle
quelle
sed
. Ich habe es versucht und es funktioniert. Es gibt einen guten Thread in Unix & Linux Stackexchange , und die akzeptierte Antwort erwähnt keine Punkte als Zeichen, denen man entkommen kann.Wenn Sie viel mehr Suchmuster haben, können Sie diese in einer Datei speichern und die Ersetzungen von dort lesen. Angenommen, dies sind die Inhalte von
replacements.txt
:Sie können dann eine Liste von N Ersetzungen lesen und diese durch folgende ersetzen:
ANMERKUNGEN:
replacements.txt
.sed
pro Austausch ausgeführt, was eine Weile dauern kann, wenn Sie viele Austauschvorgänge haben.Eine andere Möglichkeit wäre, das Obige als
sed
Skript zu schreiben :Sie können das Skript dann in Ihrer Datei ausführen und alle Ersetzungen auf einmal vornehmen:
quelle