Pfade in Dateien ersetzen

Geht es darum auf der Shell Pfade in Dateien zu ersetzen bietet sich dem geneigten Leser die offensichtlichste Variante mit einem Editor die Datei zu öffnen, den entsprechenden Teil zu editieren und nach dem Speichern zu schliessen.

Das wäre ja alle schön und gut wenn es da nicht den Massen Effekt gäbe. Oh eine Datei das ist schnell erledigt. Wie zwei? Ok das machen wir auch noch mal so eben... WTF zehn Dateien? Jetzt hört's aber auf. Und genau hier setzen wir an.

Gegeben sei... na sagen wir mal /etc/apache2/sites-available in dem nach einer kleinen Umstellung jetzt in allen Dateien die Pfade von /var/www auf /data/www umgestellt werden sollen. Da das je Dateie mehrere Zeilen betrifft muss eine effektivere Lösung her.

for i in $(ls); do sed -i 's/\/var/\/data/' $i; done;

Mittels dieser Zeile wird über das Verzeichnis iteriert und in allen Dateien die gewünschten Änderungen vorgenommen. Das ganze rückstandslos ohne irgendwelcher temporären Dateien.

Im Einzelnen bedeutet das, dass per for über die Ausgabe von ls gelaufen wird. Dabei wird jede Zeile in der Variable i abgelegt. Dann wird mit per do die Variable an den Streamline Editor sed übergeben. Dieser ersetzt dann inline (-i) den bisherigen Pfadanteil /var mit /data in allen Dateien mit dem Namen $i wobei beachtet zu beachten ist, dass der einfache Slash escapted werden muss, da er ansonsten als Trennzeichen zwischen zu findenden String und zu ersetzenden String dient.

Meine Mission

Ziel meiner Veröffentlichungen ist es, meine Begeisterung für die Programmierung und das über die Jahre gewonnene Wissen mit anderen Entwicklern zu teilen. Dabei ist es mir wichtig, Lösungen zu thematisieren für die ich in Suchmaschinen keine Antworten finden konnte. Außerdem versuche ich die von mir veröffentlichten Extensions an Beispielen zu erläutern.

evoWeb © 2019