Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Software>Terminal: String in Dateien mit 'exec sed' tauschen

Terminal: String in Dateien mit 'exec sed' tauschen

mac.apple
mac.apple27.11.0518:21
Bei dem Versuch in hunderten *.html Dateien einen bestimmten String ('font size=+2' auf 'font size=+0') auszutauschen bin ich auf folgenden Terminalbefehl gekommen:

find . -iname "*.html" -exec sed "s/font size=+2/font size=+0/g" {} \;

Es werden nun alle Inhalte ins Terminal gezogen und man sieht wie brav (im Terminal) dieser String völlig richtig ausgetauscht wird. Nur die Dateien die ich eigentlich ändern wollte bleiben davon völlig unberührt.
Nun habe ich folgende Frage:
wie erreiche ich, dass dieser String in den Dateien wirklich ausgetauscht wird, und nicht nur scheinbar im Terminal.
Vielen Dank im Voraus
Walter
OSX 10.2.8
(ich habe auch einen Apple mit Tiger, würde das aber lieber mit UNIX als mit dem Automator lösen)
0

Kommentare

dschengis
dschengis27.11.0519:01
Schau Dir mal das Kapitel: Ausgabeumleitung auf dieser Seite (http://www.wire.tu-bs.de/ADV/texte/inf3text/node3.html) an.

Da dürftest Du findig werden.

0
rupa27.11.0519:18
guguck!

da ist dann schon etwas mehr aufwand nötig, da sed ja immer nach stdout schreibt.

Es sollte also ungefär folgendes ablaufen:

Datei kopieren
Kopie bearbeiten
Orginal durch Kopie ersetzen.

also ungefär so:

find . -name "*.html" -exec sh -c " cp $1 /tmp/am_tmp_edit.html; sed \" blablabla \" /tmp/am_tmp_edit.html > $1" {} \;

(Mangels Zeit kann ich das gerade leider nicht testen ...)

Oder anderes Tool verwenden, z.B. ed oder perl

Gruß Rupa
0
mac.apple
mac.apple27.11.0520:21
also das Prinzip verstehe ich jetzt, aber die Syntax ist mir doch ein wenig zu vertraxt. Es will mir nicht gelingen.

Auch im Internet finde nur theoretische langwierige Erläuterungen, die man nicht wirklich gut in die richtige Syntax umsetzen kann.
Eine Seite mit konkreten Beispielen wäre da schon sehr hilfreich.

0
Rantanplan
Rantanplan27.11.0520:23
Geht viel einfacher

Man verzichte auf sed und nehme perl:

perl -pi.bak -e "s/font size=+2/font size=+0/g" *.html

Erzeugt so wie hier gezeigt auch noch .bak-Dateien, für den Fall der Fälle...
„Wenn ich nicht hier bin, bin ich auf dem Sonnendeck“
0
Rantanplan
Rantanplan27.11.0520:25
Nachtrag: Wenn's rekursiv durch mehrere Verzeichnisse sein soll, dann halt noch das find bemühen.
„Wenn ich nicht hier bin, bin ich auf dem Sonnendeck“
0
mac.apple
mac.apple27.11.0520:39
Perl dürfte bei mir nicht laufen:
[Apple-I:Web/Byzanz/Pages] walter% perl -pi.bak -e "s/font size=+2/font size=+0/g" *.html
perl: No match.
0
JustDoIt
JustDoIt27.11.0521:07
Mal ganz nebenbei: Das kann doch fast jeder HTML Editor. Dreamweaver ist da übrigens erste Klasse.
0
mac.apple
mac.apple27.11.0522:34
Na ja, wird' mir eh nix anderes überbleiben.
Aber diese Lösung kostet allerdings USD 399.

Und dieses Programm wird ja letztlich das auch nur mit unix erledigen.
Mit genau den Befehlen, die ich jetzt suche ...

0
rupa28.11.0515:42
Hallo nochmal,

also so geht's bei mir mit sed:

find . -name "*html" -exec sh -c 'cp "{}" /tmp/am_edit.html; sed "s/head/kopf/g" /tmp/am_edit.html > "{}"' \;

Gruß Rupa
0
_mäuschen
_mäuschen28.11.0519:02
Jetzt noch das plus Zeichen 'escapen' @@ \+, dann klappt es

perl -p -i'*.orig' -e 's/font size=\+2/font size=\+0/g' *.html

0
Rantanplan
Rantanplan28.11.0520:26
Ah, jessas, jo. Das kommt davon, wenn man den regex einfach per copy und paste einbaut. Hab ihn mir überhaupt nicht angesehen.
„Wenn ich nicht hier bin, bin ich auf dem Sonnendeck“
0
mac.apple
mac.apple28.11.0523:19
Heureka! Es funkt perfekt.
Einfach genial.
DANKE FREUNDE:)

Das Terminal ist ja auch wirklich ein mächtiges Instrument.
(Ich hab' zB. auch kein eigenes FTP Programm. Auch das geht ganz einfach mit dem Terminal. Und vorallem von jedem Rechner aus.)

Werd' mich jetzt intensiv mit Darwin beschäftigen.
Nochmals Danke
Walter
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.