Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

[solved] Textersetzung in Dateien

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
mampfi
Hacker
Hacker
Beiträge: 670
Registriert: 17. Mär 2004, 19:33
Wohnort: München

[solved] Textersetzung in Dateien

Beitrag von mampfi »

Suche nach einem Weg, wie ich in einer Reihe von Dateien Text ersetzen kann.

beispielsweise in allen *.txt Dateien 'a' durch 'b'.

Mit dem sed kriege ichs einfach nur mit einer Datei hin.
Programmieren macht Spaß und ärgert gleichzeitig
Benutzeravatar
nobbiew
Hacker
Hacker
Beiträge: 497
Registriert: 1. Mär 2004, 23:26

Beitrag von nobbiew »

Code: Alles auswählen

for x in `find . -name '*.txt'`
do
	sed 's/a/b/g' $x >$x.new
	cat $x.new >$x
	rm -f $x.new
done
sollte genau das machen was du willst.
Das Problem liegt daran, dass sed nur auf die Standardausgabe ausgibt und eine Umleitung in die Ursprungsdatei nicht funktioniert, da diese zu dem Zeitpunkt exclusiv von sed geöffnet ist. Mit der cat- u. rm-aktion werden die Schutzrechte der Ursprungsdatei beibehalten.
In diesem fall ersetzt sed alle vorkommen von a in einer zeile, wenn du g wecklässt ersetzt er nur das jeweils erste Vorkommen in der Zeile
mampfi
Hacker
Hacker
Beiträge: 670
Registriert: 17. Mär 2004, 19:33
Wohnort: München

Danke

Beitrag von mampfi »

Danke Dir, also doch mit Schleife.

Bei den UNIX-Tools kann man leicht den Überblick verlieren ;-)
Programmieren macht Spaß und ärgert gleichzeitig
Benutzeravatar
mattias
Newbie
Newbie
Beiträge: 1
Registriert: 16. Apr 2004, 00:25
Wohnort: Hannover

Beitrag von mattias »

nobbiew hat geschrieben: Das Problem liegt daran, dass sed nur auf die Standardausgabe ausgibt und eine Umleitung in die Ursprungsdatei nicht funktioniert, da diese zu dem Zeitpunkt exclusiv von sed geöffnet ist.
Mit der Konstruktion

Code: Alles auswählen

	for x in `find . -name '*.txt'`
do
	cat $x | sed 's/a/b/g' >$x
done
läßt sich das Problem mit der im Zugriff befindlichen Ursprungsdatei umgehen und das Erzeugen von temporären Dateien ist nicht mehr erforderlich.

CU Mattias P.
Benutzeravatar
nobbiew
Hacker
Hacker
Beiträge: 497
Registriert: 1. Mär 2004, 23:26

Beitrag von nobbiew »

Und wie groß ist der Puffern, damit das nicht in die Hose geht. cat liest meines wissens nicht alles in den Arbeitsspeicher, bevor es mit der Ausgabe beginnt. Und dann hast du ein Problem. Da ja die Ursprungsdatei schon mit der Ausgabe von sed überschriebe wurde
Antworten