PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : vi ersetzen von ganzen Pfaden



zwerg2003
04-08-2010, 08:40
Hallo,
suchen und globales ersetzten funktioniert mit vi mit

:s/sting1/string2/g

nur wie kann ich in einer Datei komplette Pfadangaben ersetzen?
das maskieren der / im Pfad mit \ funktioniert nicht. Die Pfade in '' zu setzten auch nicht.

Danke im voraus

John W
04-08-2010, 16:22
:s ersetzt nur in der aktuellen Zeile, um in der ganzen Datei zu ersetzen, nutzt man :%s.
Slashes müssen escaped werden. Bei mir funzt z.B. folgendes wunderbar:

:%s/\/home\/john\//\/root\//g
Ich nutz übrigens vim; wenn du vi aufrufst, startest du vim im Kompatibilitätsmodus - meiner Meinung nach Blödsinn, vi ist deshalb bei mir ein Alias auf "vim -p" (ViM mit Tabs für Dateien), die Ersetzung klappt jedoch auch, wenn ich vim als vi aufrufe.

zwerg2003
04-08-2010, 16:37
ok mit dem Aufruf geht es mit nun, was ist der Unterschied zwischen %s und nur s? Ist es wirklich nur die Zeilenabarbeitung?

Ich habe mir erstmal mit einem kleinen Skript geholfen.


#!/bin/bash

oldpath=/test/lib
newpath=/test/local
cat $1 | sed "s;${oldpath};${newpath};" >$1


das funktioniert ganz gut.

Danke für die Hilfe

John W
04-08-2010, 17:11
% ist ein Bereichsoperator, der die ganze Datei als Bereich angibt.
Ohne Bereichsangabe wird die aktuelle Zeile benutzt.
:help command-range hilft dir weiter.