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
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