Suchen und Ersetzen mit SED

Moritz

Moritz

Life is hard and so am I
Hallo zusammen!

Ich muss in zigtausend Text-Dateien ein Wort gegen ein anderes austauschen. Das geht mit SED ja folgendermaßen:
Code:
sed 's/'SUCHE'/'ERSETZE'/g' *
Dabei wird allerdings die Datei nicht geschrieben, sondern die Veränderung nur angezeigt. Umleiten kann ich nicht, da ich ja * durchsuchen und ersetzen will. In der Manpage von SED konnte ich den Trigger zum schreiben nicht finden... kann mir wer helfen?

Grüße,
Moritz
 
Aber klar doch

Siehe dieses kleine Skript hier:
Code:
#!/bin/bash
for item in $*
do
  cp $item $item.bak
  sed -f ~/.sedfile $item.bak > $item
  rm $item.bak
done

Ich habe es applysed.sh genannt.
"applysed.sh FILE"

Du musst erst eine Kopie deiner Datei anlegen, über diese sed laufen lassen und das Ergebnis in deine alte Datei schreiben..

Die "sedfile" sieht dann so aus:
Code:
s.daß.dass.g
s.muß.muss.g
s.Strasse.Straße.g
 
Gern geschehen. Wichtig ist halt nur das du NIE sowas machst:
sed -f ~/.sedfile datei > datei
Dann wirst du dich mal so ärgern wie ich denn dann ist datei nämlich leer!
 
Schon probiert ;-)

Noch'n Problem: Wie kann ich aus allen Dateien die dritte Zeile komplett löschen?
 
hab's schon....
3d in die .sedfile
 
noob-Frage

Hallo!

Ich weiß selbst wie noob diese Frage ist, und es ist mir auch peinlich, aber ich fange nunmal erst an, mich in Linux einzuarbeiten...

Ich habe ein shell-Script gebaut, das mir genau eine Zeile in genau einer Datei ersetzen soll. Das Script sieht im wesentlichen so aus:
Code:
cat $file | sed -e "s/$search/$replacewith/g" > $file
Jetzt habe ich ein bisschen herumexperimentiert, und versucht einen String zu ersetzen, den es nicht gab. Daraufhin war die geschriebene Datei dann leer.
Nur schaffe ich es jetzt irgendwie nicht mehr, das zu reproduzieren!?

Also entweder muss ich vorher noch die Datei sichern, oder meinen SED-Befehl erweitern.
Ich mach jetzt schon ziemlich lange an diesem Mist rum... Ich wäre super-dankbar für irgendwelche Infos.

Jan
 
Hallo

Auch hier ein useless use of cat.
Schau dir mal diesen Beitrag an.
Da habe ich genau erklärt, warum das nicht geht.
Wenn du cat weglässt, wird es ersichtlich. ;)
Das sollte dein Problem lösen.
Eventuell sollte der Beitrag mal nach Shell verschoben werden.
Ist aber nur ein Vorschlag von mir.

Gruß Wolfgang
 
Hallo Wolfgang,
Danke für Deine Antwort. Ich habs hinbekommen, auch wenn mein SED den Parameter -i nicht kennt.
Gruß,
Jan
 
Suchen / Ersetzen

Hallo,
ich habe auch ein kniffliges (zumindest für mich :)) sed-Problem...
Habe folgendes vor:

Ich füge per sed Konmtaktdaten, die zuvor eingelesen wurden, in Formulare ein..
Bsp:
sed 's/'"\*FIRMA\*"'/'"${FIRMA}"'/g' > zieldatei

soweit so gut, ABER:

wenn jetzt aber der Firmenname bsp ein "&" enthält, verfälscht es den Befehl und rauskommen tut sowas wie:
Kunz GmbH *FIRMA* Co. KG

Wie lässt sich das vermeiden?
Es ist leider nicht möglich, die Sonderzeichen gleich beim Einlesen der Variablen zu erkennen und diese per "\" zu maskieren...
Hat vielleicht jemand einen Vorschlag? :hilfe2:!
 
Zuletzt bearbeitet von einem Moderator:

Ähnliche Themen

SED: eine Zeile mit einem Grep-Output ersetzen

Keine grafische Oberfläche (Debian Installation)

Script zur Korrektur einer E-Book Datei

SED: Zu bearbeitende Dateien aus Textfile einlesen

Leerzeichen, Großbuchstaben, HTML Tags entfernen mittels SED

Zurück
Oben