online 1
gast (50)

/ Forum / Anwendungen(Java,C++...)

Anwendungen(Java,C++...)Anwendungen(Java,C++...)

Fragevon RolandH. vom 15.08.2020, 08:43 Options

SED - warum erzeugt suchen und ersetzen eine kompl. leere Datei?

Hallo an alle.

Bin dank einiger sehr guter Beiträge hier im Forum
auf die Möglichkeit gestoßen per SED ein automatisiertes suchen und ersetzen in einer txt Datei durchzuführen.

Habe nun SED installiert und eine Batch-Datei mit folgendem Inhalt geschrieben.

sed 's/80280/80230/g' C:\test.dif > c:\test_neu.dif

Es soll also die Zeichenfolge 80280 durch die Zeichenfolge 80230 ersetzt werden.

Es wird nun auch brav eine test_neu.txt erzeugt, allerdings ist diese leer.

In Wirklichkeit sehen de Zeilen in der Ursprungsdatei ungefähr so aus:

0,1,80280,1,1,1,000,669.34, Karl Müller
1,0,80280,1,1,1,000,669.34, Heinz Meier
1,1,80280,1,1,1,000,669.34, Otto Schmitz
1,1,80280,1,1,1,000,669.34, Mona Lisa


Es stehen also kommagetrennte Werte da drinnen.

Was muss ich in der sed-ommandozeile verändern, damit nicht die gesamten Zeilen gelöscht werden?

Ich hab jetzt schon das Forum gesucht und fleißig gegoogelt finde aber keine Lösung.

Das Problem (der leeren Datei, die erzeugt wird) hab ich zu Hause am XP-Rechner ebenso wie im Betrieb am NT-Rechner.

Gruß
Roland


Antwort schreiben

Antwort 1 von MacGyver031 vom 15.08.2020, 09:00 Options

Ich habe deinen Script auf meinem Linux Rechner ausprobiert und es macht was es sollte.

Es könnte sein dass die
>
vom Windows anders interpretiert wird. Versuch doch mal mit
sed 's/80280/80230/g' C:\test.dif >> c:\test_neu.dif

Antwort 2 von bored vom 15.08.2020, 09:09 Options

Interessant... mit der Linux-Version funktioniert das einwandfrei...

Probier mal, die Datei test.dif manuell zu kopieren und dann den Befehl mit einem -i, dafür ohne Umleitung zu benutzen.
also so z.B.:
copy C:\test.dif C:\test_neu.dif
sed -i 's/80280/80230/g' C:\test_neu.dif


Oder du benutzt das Windows-Äquivalent zu 'cat' (kenne mich nicht So gut mit Batch aus, notfallsweise nimmst du das aus den GNU-Tools (Google)) und machst das ganz von Hand:
cat C:\test.dif | sed 's/80280/80230/g' > C:\test_neu.txt


mfg

Antwort 3 von Jaja vom 15.08.2020, 09:50 Options

Zitat:
Oder du benutzt das Windows-Äquivalent zu 'cat' (kenne mich nicht So gut mit Batch aus, notfallsweise nimmst du das aus den GNU-Tools (Google)) und machst das ganz von Hand:

cat C:\test.dif | sed 's/80280/80230/g' > C:\test_neu.txt


unter win funktioniert das pipen nicht, den operator | kennt cmd leider nicht...

@fragesteller:

guck dir mal die hilfe zu deine sed version an - evtl. ist diese unter win etwas anders zu handhaben. probiere mal sed -? oder sed /? um die hilfe angezeigt zu bekommen - an sonsten gibts sicher hilfe auf der seite, wo du die version heruntergeladen hast.

Antwort 4 von Jaja vom 15.08.2020, 09:53 Options

aso!!!

ich hab ne idee!

evtl. kommt die win shell mit dem / nicht zurecht, auch wenn diese durch ' escaped wird.
probiere mal die ' wegzulassen und den trenner / zu ersetzen (bei gnu sed unter linux darf man das- bei deiner version sicher auch)

also ungefähr so:

sed s!80280!80230!g C:\test.dif

wenn die ausgabe dann stimmt, leitest du sie per > in eine neue datei um, wie du es schon probiert hattest.

Antwort 5 von RolandH. vom 15.08.2020, 10:41 Options

Hallo,

danke für die Antworten aber leider führt nichts zum Erfolg.

Ich verstehe das nicht, denn gem. der Hilfe meiner SED Version müsste meine Kommandozeile - auch der Trenner - richtig sein.

Habe jetzt mal andere SED-Befehle über die Datei laufen lassen, z.B. -i.bak (das sollte eine Kopie der Datei mit der Endung .bak erzeugen).

Da tut sich aber nichts.

Ich habe das Gefühl, SED weiß gar nicht, welche Datei bearbeitet werden soll.

Bin ratlos.

Gruß
Roland

Antwort 6 von RolandH. vom 15.08.2020, 10:45 Options

wobei ... die Umleitung in die neue Datei per > klappt ja.

Antwort 7 von son_quatsch vom 15.08.2020, 12:18 Options

Die Apostrophe ' sind vollkommen überflüssig und gelten mit als Parameter - SED müsste das also anmeckern als Syntaxfehler.

Der korrekte Aufruf wäre
sed s/80280/80230/g C:\test.dif > c:\test_neu.dif

Antwort 8 von superSED vom 15.08.2020, 12:32 Options

dein Beispiel klappt bei mir unter windows einwandfrei, allerdings verwende ich den "SuperSed" von dieser Website (freeware)

http://www.cornerstonemag.com/sed/

Antwort 9 von RolandH. vom 15.08.2020, 13:38 Options

So, erst mal VIELEN DANK für eure Geduld, bin einen Schritt weiter.

Ohne die Apostrophe gehts.

Nun hab ich "nur" noch das Problem, dass die Zeilen nicht korrekt umgebrochen werden.

Sprich, in der Ausgabe-Datei erscheint statt des Zeilenumbruchs ein schwarzes Quadrat.

Habt ihr dafür auch eine Lösung?

Gruß
Roland

Antwort 10 von RolandH. vom 18.08.2020, 09:52 Options

Guten Morgen ans Forum.

Ich möchte den Beitrag noch einmal nach oben schieben.

Ich denke, das Problem der Zeilenumbrüche basiert auf einer Änderung des Schriftsatzes.

Kann das sein?

Und wie könnte ich SED beibringen, diesen nicht zu verändern?

Übrigens:

bei Erstellung meiner Frage, sagte ich nur die halbe Wahrheit. m;-)

Ich muss zwei Zahlen ändern und habe bisher folgende Kommandozeilen erstellt:

Zitat:
sed -e s/80280/80230/g test.dif > test.neu.dif

sed -e s/80380/80330/g test.neu.dif > test.ganz.neu.dif


Es gibt wohl ein Parameter -b.

Wenn ich das verwende, funktionieren aber die o.g. Zeilen nicht mehr.

Hat jemand noch eine Idee für mich?

Ich benutze sed 4.1.5 für Win32.

Gruß
Roland

Ähnliche Themen

Batchdatei zum Suchen & Ersetzen
DonFerrando75  11.08.2007 - 112 Hits - 4 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 01:23:17 2026