Mit sed Dateien verändern

Es gab eine Aufgabe zu erfüllen, die rund 115 HTML-Dateien betraf. Leider habe ich auf der Arbeitsstelle keinen Webserver zur Verfügung, daher musste ich rein aus HTML5 eine Webpage mit seitlichem Menü bauen. Das Menü wird mit iframe eingebunden. Der Vorteil an dieser eingebundenen Navigation ist, dass es eine Datei gibt, in der die Navigation liegt, und wenn es zu Änderungen kommt, dann muss nur die Navigationsdatei geändert werden.

Der Nachteil an einer reinen HTML5-Variante ist, dass der Pflegeaufwand der jeweiligen Seiten sehr hoch ist, sollte sich mal was grundlegendes ändern müssen. Kaum war ich mit meinen Arbeiten fertig, stellte ich fest, dass der Seitentitel falsch war. Och nee, 115 Dateinen einzeln ändern mit immer immer dem gleichen Text. Das schrie dann nach einer automatisierten Aktion.

Kurz hatte ich überlegt, ob ich ein PHP-Script zusammenbauen sollte. Aber ich entschied mich dagegen, um ein bisschen mehr auf der Kommandozeile zu tun. Letztens hatte ich meine Bibliothek (Papierbücher) noch aufgefrischt und mir einen dicken Schmöker zur Shell-Programmierung besorgt. Google-Recherche und Buchinhalt kamen zu gleichen Ergenbis: sed.

Mit sed (Stream Editor) sollte ich in die Lage versetzt werden, um in einer Datei einen String (einzelne oder mehrere Zeichen) zu suchen und durch einen neuen Wert ersetzen zu lassen. Das war genau das, was ich brauchte. Ein Test zeigte, dass mit folgendem Kommando auf der Konsole die Datei verändert wurde.

user@rechner# sed -i -e 's/alter Text/neuer Text/g' test.txt

In meinem Buch wurden die Optionen -i und -e nicht beschrieben. Es klappt nicht, der alte Werte wurde mit dem neuen Wert nicht ersetzt. Erst die Hereinnahme der beiden Optionen brachte den Erfolg. Aber, sollte ich nun auf der Konsole 115 Dateien einzeln bearbeiten? Nein!

Es musste ein kleines Shell-Script her, mit dem es möglich war alle im Ordner befindlichen Dateien, die die jeweils gleiche Veränderung erfahren sollten, zu editieren. In einem Rutsch. Aus allerlei Quellen habe ich mir das folgende Script erstellt. Vielleicht nicht schön, aber es hat das getan was getan werden musste.

#!/bin/bash


ls -1 *.html | while read file;

# Schleife zur Abarbeitung wird geöffnet und begonnen
	do {

	sed -i -e 's/alter Text/neuer Text/g' $file

	echo "Bearbeite Datei $file"

	}
done

#Schleife nur geschlossen, nach dem alle Dateien im Ordner bearbeitet wurden.

echo "Alle Dateien wurden bearbeitet."

exit

# Programmende

Die 115 Dateien waren im Nu durchgearbeitet. So schnell konnte ich gar nicht gucken. Somit habe ich einen Weg gefunden, den ich gehen kann, wenn ich wieder mal in vielen Dateien die gleichen Änderungen vornehmen muss. Eine ähnliche Sache steht mir noch bevor, weil ich in den Dateien bei Zeiten noch etwas hinzuzufügen habe. Das kann ich nun auch noch angehen.


Der Blogartikel (244) wurde in der Kategorie Shell erstellt am: 2016-12-06 20:17:18




Kommentar hinterlassen

Name::


eMail-Adresse:*


Kommentar:


veröffentlichen:**:


Sicherheitsfrage: Rechenaufgabe: 20 - 9

Alle Felder sind Mussfelder, ansonsten wird der Kommentar nicht in die Datenbank geschrieben.

* Die Mailadresse wird in keinem Falle veröffentlicht.

** Hiermit regelt der Kommentator, ob der verfasste Kommentar (Name und Kommentartext) veröffentlicht werden darf.