www.bimminger.at

Tipps / Linux

Linux

Ersetzen in Dateien mit Linux


Das Ersetzen von Strings unter Linux geht mit unterschiedlichsten Bordmitteln.

Unter Linux in Dateien ersetzen mit vi


Ganz einfach kann man mit vi innerhalb einer Datei ersetzen.

vi datei
:s/Suchmuster/Ersetzmuster/
:x


Mit vi datei öffnet man die Datei. Im Editor vi selbst, kann man dann mit :s/abc/cba die Zeichenkette abc durch cba ersetzen. Mit :x wird die Datei wieder gespeichert und vi beendet.

Bei gößeren Files empfiehlt sich aber ein Streaming-Editor wie sed.

Unter Linux in Dateien ersetzen mit sed


Ersetzen von Strings in Dateien unter Linux mit Sed geht sehr einfach:

sed "s/Juni 2004/Juli 2004/" ausgangsfile > neuerfile

In diesem Beispiel wird in der Datei ausgangsfile der Juni 2004 durch den Juli 2004 ersetzt und das Ergebnis in neuerfile gesichert. Danach könnte man mit mv neuerfile ausgangsfile die Originaldatei wieder überschreiben. Statt der Angabe eines neuen Dateinamens kann auch mit dem Parameter -i gearbeitet werden.

sed "s/Juni 2004/Juli 2004/" -i EinAusgangsfile


Hinweis: Diese Vorgehensweise ersetzt nur ein Vorkommen von "Juni 2004" pro Zeile. Sollen pro Zeile mehrere Ersetzungen vorgenommen werden sollte auf folgende Anweisung zurückgegriffen werden

sed -e ":a;s/Juni 2004/Juli 2004/;ta" ausgangsfile > neuerfile

Aber auch hier muss aufgepasst werden! Sollte der zu ersetzende Begriff ein Teil des ersetzenden Begriffes sein (Bsp.: "Jun" und "Juni") läuft diese Vorgehensweise in eine Endlosschleife. Dann muss man versuchen über ein Zwischenmuster zu übersetzen.

sed -e ":a;s/Jun/aaaaaaaa/;ta;:b;s/aaaaaaaa/Juli/;tb" ausgangsfile > neuerfile

Wobei "aaaaaaaa" nur das Zwischenmuster bildet. Auch bei diesem Tipp wieder mal ein großes Dankeschön an Robert für den Hinweis mit dem mehrmaligen Vorkommen von Suchmustern pro Zeile!

Das ganze funktioniert natürlich auch innerhalb einer for Schleife.

for i in *.html; do sed 's/Juni 2004/Juli 2004/' $i > _$i; done
for i in _*; do mv $i ${i#_}; done


Die 1. Schleife ersetzt wie das erste Beispiel den Juni 2004 durch den Juli 2004 in allen HTML-Dateien und die 2. überschreibt gleich wieder die Originale.

Lustig wird es natürlich erst wenn man mit regulären Ausdrücken arbeitet und umfangreichere Ersetzungen vornimmt ;-)


Um einen Diskussionsbeitrag zu posten müssen Sie eingeloggt sein.