autom. Dateibearbeitung mit SED

Post Reply
Message
Author
thorsten
Posts: 72
Joined: 23. Jan 2002 13:54

autom. Dateibearbeitung mit SED

#1 Post by thorsten »

Hallo,
ich habe ein Problem mit der Dateibearbeitung per sed.
Ich möchte in einem Verzeichnis mit Unterverzeichnissen alle Dateien heraussfinden, die "SUCHWORT" enthalten.
Diese sollen dann mittels sed bearbeitet werden in der Form, dass "SUCHWORT" gegen "ERSETZUNG" ausgetauscht wird.

Um die Dateien zu finden nehme ich mir grep zu Hilfe:
<blockquote><hr>grep -r -l "SUCHWORT" dir/* 2> /dev/null<hr></blockquote>

Der grep Befehl liefert die Dateinamen mit realivem Unterverzeichnis, falls die Datei in einem SubDir lag.

sed soll nun den Austausch vornehmen:
<blockquote><hr>sed -e 's/SUCHWORT/ERSETZUNG/g' DATEI > DATEI<hr></blockquote>

Setzte ich an Stelle des ">" ein ">>" ein, fügt sed die Bearbeiteten Textzeilen korrekt an das Ende der Datei.
Gebe ich einen anderen Dateinamen als Ziel an, wird diese Datei richtig erzeugt mit korrektem Inhalt.

Das ganze habe ich in einem Script versucht zu automatisieren:
<blockquote><hr>#!/bin/sh

for i in `grep -r -l "SUCHWORT" dir/* 2> /dev/null`; do
test -r $i || continue
sed -e 's/SUCHWORT/ERSETZUNG/g' $i > $i
done<hr></blockquote>

nur leider sind alle Dateien, die SUCHWORT enthalten, nach Ausführung des Sriptes leer.

Hat jemand eine Idee, oder evt. auch einen anderen Lösungsvorschlag für mein Problem?

Vielen Dank

Thorsten

PS: Angemeldet am System als root, habe also auch die nötigen Rechte...
Last edited by thorsten on 22. Jan 2003 12:03, edited 1 time in total.

Chris

Re: autom. Dateibearbeitung mit SED

#2 Post by Chris »

Hi!

Durch das Umleiten des sed-Befehls wird die Zieldatei erstellt bevor die Quelldatei eingelesen wird. Da es sich hierbei allerdings um ein und dieselbe Datei handelt wird die Datei vorher gelöscht da du > und nicht >> verwendet hast. Versuch mal den folgenden Code. Der erstellt zuerst eine Sicherheitskopie und nutzt diese dann als Quelldatei für das sed-Kommando.

Gruß
Chris

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/bin/sh
for i in `grep -r -l "SUCHWORT" dir/* 2> /dev/null`; do
test -r $i || continue
cp $i $i.bak
sed -e 's/SUCHWORT/ERSETZUNG/g' $i.bak > $i
done
</font><hr></pre></blockquote>

thorsten
Posts: 72
Joined: 23. Jan 2002 13:54

Re: autom. Dateibearbeitung mit SED

#3 Post by thorsten »

Vielen Dank, das hat mit einer weiteren Änderung dann funktioniert.
Habe noch eine Zeile eingefügt das die -bak wieder gelöscht wird.
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/bin/sh

for i in `grep -r -l "ueber18" dir/* 2> /dev/null`; do
test -r $i || continue
cp $i $i.bak
sed -e 's/ueber18/eroproof/g' $i.bak > $i
rm $i.bak
done
</font><hr></pre></blockquote>

Post Reply