Hallo,
Ich will auf dem Webserver ca 200 vorkommen eines Ausdruckes in versch. Dateien durch einen anderen ersetzen. Habe schönen ssh-Zugang, also an die Arbeit:
$: cat mache #!/bin/sh cd $1 echo "----------------------------------------------" for file in * do if (test -d $file) then mache $file else sed --silent s/wohnungsmarkt-dresden/immoserver.net/ $file echo bearbeite $file fi done $:
vom httpdroot mit $: mache . aufgerufen und der marschiert los. Schön quer durchs Gemüse, wie gewünscht. Veflixterweise ersetzt der aber nix, in keinem File. Der Fehler liegt sicher irgendwo im sed-Ausdruck, und genau da bin ich (auch) nicht so bewandert.
Mein Chef stöhnt schon, ich solls doch zu Fuß ersetzen, aber wer hat schon Bock dazu?
Wer hat 'nen Tip?
On Fri, Oct 13, 2000 at 05:51:05PM +0200, Jens Puruckherr wrote:
$: cat mache #!/bin/sh cd $1 echo "----------------------------------------------" for file in * do if (test -d $file) then mache $file else sed --silent s/wohnungsmarkt-dresden/immoserver.net/ $file echo bearbeite $file fi done $:
1.) sed editiert nicht das angegeben $file direkt sondern gibt das File samt der ersetzten Stellen auf die Standardaisgabe. Du wirst also ein temporaeres File benötigen. 2.) bei --silent (wegen der portabilitaet würde man hiefuer -n schreiben) wird nix automatisch ausgegeben (siehe manual)
etwa so:
tmpfile=$HOME/tmpfile ... else echo bearbeite $file sed s/wohnungsmarkt-dresden/immoserver.net/g $file >$tmpfile cp $tmpfile $file fi ... rm $tmpfile
Das /g hinten sorgt dafuer, dass ggf. auch mehrere Ersetzungen pro Zeile gemacht werden. Das obige Skript funktioniert nur, wenn die Datei- und Verzeichnisnamen keine Leerzeichen enthalten.
Reinhard
On Fri Oct 13, 2000 at 17:51:05 +0200, Jens Puruckherr wrote:
sed --silent s/wohnungsmarkt-dresden/immoserver.net/ $file Der Fehler liegt sicher irgendwo im sed-Ausdruck, und genau da bin ich
Richtig. Das sollte ungefaehr so aussehen:
sed -e 's/foo/bla/g' $file > $file.tmp mv $file.tmp $file
sed gibt nach stdout aus. Da Du das mit dem --silent allerding entsorgst, ist das ganze sed natuerlich zwecklos. Deshalb erst in ein temporaeres File umleiten (sollte natuerlich nicht existieren :-), und dann wieder in das originale umbenennen...
Adam
Jens Puruckherr schrieb:
Hallo,
Ich will auf dem Webserver ca 200 vorkommen eines Ausdruckes in versch. Dateien durch einen anderen ersetzen. Habe schönen ssh-Zugang, also an die Arbeit:
$: cat mache #!/bin/sh cd $1 echo "----------------------------------------------" for file in * do if (test -d $file) then mache $file else sed --silent s/wohnungsmarkt-dresden/immoserver.net/ $file echo bearbeite $file fi done $:
Wer hat 'nen Tip?
z.B. so (wenn dir die nützlichen Tipps der anderen nicht gefallen :-)
perl -pi -e 's/wohnungsmarkt-dresden/immoserver.net/g' $file
statt sed mit Ausgabeumleitung
Jan
On Fri, Oct 13, 2000 at 05:51:05PM +0200, Jens Puruckherr wrote:
Hallo,
Ich will auf dem Webserver ca 200 vorkommen eines Ausdruckes in versch. Dateien durch einen anderen ersetzen. Habe schönen ssh-Zugang, also an die Arbeit:
$: cat mache #!/bin/sh cd $1 echo "----------------------------------------------" for file in * do if (test -d $file) then mache $file else sed --silent s/wohnungsmarkt-dresden/immoserver.net/ $file echo bearbeite $file fi done $:
vom httpdroot mit $: mache . aufgerufen und der marschiert los. Schön quer durchs Gemüse, wie gewünscht. Veflixterweise ersetzt der aber nix, in keinem File. Der Fehler liegt sicher irgendwo im sed-Ausdruck, und genau da bin ich (auch) nicht so bewandert.
Vielleicht, weil Du die Ausgabe von sed nirgens hinschreibst? Oder macht sed jetzt inplace edit?
sed --silent s/wohnungsmarkt-dresden/immoserver.net/ $file
sed --silent s/wohnungsmarkt-dresden/immoserver.net/ $file > $file.sed \ && cp $file.sed $file && rm $file.sed
Best regards from currently Schwerin/Germany Viele Gruesse aus z.Z. Schwerin/MV Heiko Schlittermann
On Sat, Oct 14, 2000 at 02:22:08PM +0200, Heiko Schlittermann wrote:
On Fri, Oct 13, 2000 at 05:51:05PM +0200, Jens Puruckherr wrote: Vielleicht, weil Du die Ausgabe von sed nirgens hinschreibst? Oder macht sed jetzt inplace edit?
sed --silent s/wohnungsmarkt-dresden/immoserver.net/ $file
sed --silent s/wohnungsmarkt-dresden/immoserver.net/ $file > $file.sed \ && cp $file.sed $file && rm $file.sed
Unbedingt das --silent weglassen, da das die Ausgabe von sed unterdrückt, sofern sie nicht explizit per p-Option erzwungen wird (soll heißen, $file.sed ist leer).
On Fri, Oct 13, 2000 at 05:51:05PM +0200, Jens Puruckherr wrote:
Hallo,
Hallo
Ich will auf dem Webserver ca 200 vorkommen eines Ausdruckes in versch. Dateien durch einen anderen ersetzen. Habe schönen ssh-Zugang, also an die Arbeit:
$: cat mache #!/bin/sh cd $1 echo "----------------------------------------------" for file in * do if (test -d $file) then mache $file else sed --silent s/wohnungsmarkt-dresden/immoserver.net/ $file
Versuchs mal mit "sed s/.../.../ $file >$file". Unbedingt --silent weglassen, weil sed sonst nichts ausgibt (du machst dir nur deine Daten kaputt)! sed gibt auf die Standardausgabe aus -> Folge: umleiten.
echo bearbeite $file fi done
...
Mit freundlichen Grüßen, Jens mailto:puru@elbvilla.de
Ulf
Hi!
sed --silent s/wohnungsmarkt-dresden/immoserver.net/ $file
Der Fehler liegt sicher irgendwo im sed-Ausdruck, und genau da bin ich (auch) nicht so bewandert.
Der Ausdruck ist schon OK (falls Du "wohnungsmarkt-dresden" durch "immoserver.net" ersetzen willst), aber meiner Meinung nach gibt sed das Ergebnis einfach auf die Standardausgabe aus. Was Du willst, ist das Ganze in das File zurückzuschreiben...
Gruß, Eric
lug-dd@mailman.schlittermann.de