necroscope
Goto Top

Dateien mit Sed bearbeiten

Guten Morgen.

Ich muss viele Dateien für eine Datenmigration Nachbearbeiten und würde gerne dafür Sed benutzen.

Aufgabe: an Zeile 6 ein " anhängen/tauschen weil es dort fehlt. es wurden nur 256 Zeichen ausgelesen.

C:\>sed 6s/.\{1\}$/\"/ d:\P0249902.jpl liefert das gewünschte Ergebnis auf dem Monitor, aber wie schreibt er es zurück in die Datei?

C:\>sed 6s/.\{1\}$/\"/ d:\P0249902.jpl > d:\P0249902.jpl funktioniert nicht.

Content-ID: 196469

Url: https://administrator.de/forum/dateien-mit-sed-bearbeiten-196469.html

Ausgedruckt am: 10.04.2025 um 23:04 Uhr

Alchimedes
Alchimedes 04.01.2013 um 11:48:04 Uhr
Goto Top
Hallo,

um in eine Datei zu schreiben nutze die option -w

http://openbook.galileocomputing.de/shell_programmierung/shell_014_000. ...


Gruss
Necroscope
Necroscope 04.01.2013 um 12:30:55 Uhr
Goto Top
Ja aber wohin mit der Option?
Alchimedes
Alchimedes 04.01.2013 um 12:55:53 Uhr
Goto Top
Hallo,

das Sed Tutorial erklaert es doch ganz gut.

Aus Openbooks
Das entsprechende Gegenstück zum Kommando r erhalten Sie mit dem Kommando w, mit
dem Sie das Ergebnis von sed in einer Datei speichern können:

you@host > sed -n '/USA/w USA.dat' mrolympia.dat
you@host > cat USA.dat
Larry Scott USA 1965 1966
Sergio Oliva USA 1967 1968 1969
Chris Dickerson USA 1982
Lee Haney USA 1984 1985 1986 1987 1988 1989 1990 1991
Ronnie Coleman USA 1998 1999 2000 2001 2002 2003 2004


So muesste das jetzt gehen.

C:\>sed 6s/.\{1\}$/\"/w d:\P0249902.jpl

Gruss
Necroscope
Necroscope 04.01.2013 um 13:12:18 Uhr
Goto Top
schon probiert aber dann kommt dies hier:

D:\Downloads\GetGnuWin32\bin>sed 6s/.\{1\}$/\"/w d:\P0249902.jpl
sed: couldn't open file : No such file or directory

D:\Downloads\GetGnuWin32\bin>cat d:\P0249902.jpl | sed 6s/.\{1\}$/\"/w out.txt
sed: couldn't open file : No such file or directory
Alchimedes
Alchimedes 04.01.2013 um 13:19:59 Uhr
Goto Top
Hallo,

Ist ja Ploetzlich eine ganz Andere Aufgabenstellung!!
das ist naturlich klar das das nicht geht.

Weil Sed liest aus einer Datei... Du willst aber eine Datei nach sed reinschieben...
D:\Downloads\GetGnuWin32\bin>(<---das hier geht nicht!) sed 6s/.\{1\}$/\"/w d:\P0249902.jpl

Nimm Dir Zeit und arbeite das Tutorial durch.
Das hilft Dir auf dauer nichts wenn ich Dir hier ne Loesung reinpruegel
die Du nicht verstehst.

Gruss
Necroscope
Necroscope 04.01.2013 um 13:35:31 Uhr
Goto Top

Nimm Dir Zeit und arbeite das Tutorial durch.
Das hilft Dir auf dauer nichts wenn ich Dir hier ne Loesung reinpruegel
die Du nicht verstehst.


ja wieso kann ich das was auf dem Bildschirm richtig angezeigt wird nicht in eine Datei schreiben?

you@host > sed -n '/USA/w USA.dat' mrolympia.dat

das würde für mich bedeuten: sed 6s/.\{1\}$/\"/w d:\P0249902.jpl d:\P0249902.jpl

geht aber auch nicht.
Alchimedes
Alchimedes 04.01.2013 um 13:45:05 Uhr
Goto Top
Weil das
you@host > sed -n '/USA/w USA.dat' mrolympia.dat

was anderes ist als das

D:\Downloads\GetGnuWin32\bin>sed 6s/.\{1\}$/\"/w d:\P0249902.jpl
Necroscope
Necroscope 04.01.2013 um 14:29:08 Uhr
Goto Top
Die Syntax ist wohl unterschiedlich in den Beispielen.

Per Try n Error hab ich mit diesem Befehl
sed -n "6s/.\{1\}$/\"/w d:\out2.txt" d:\P0249902.jpl

eine Datei erstellen können, aber da steht dann nur die geänderte Zeile drin und nicht das was vorher alles zu sehen war.
Lochkartenstanzer
Lochkartenstanzer 04.01.2013 aktualisiert um 19:13:14 Uhr
Goto Top
-i

Nachtrag:

C:\>sed 6s/.\{1\}$/\"/ -i d:\P0249902.jpl

should do the job.

lks
paulepank
paulepank 04.01.2013, aktualisiert am 05.01.2013 um 08:11:47 Uhr
Goto Top
Hallo Necroscope,

C:\>sed 6s/.\{1\}$/\"/ d:\P0249902.jpl liefert das gewünschte Ergebnis auf dem Monitor
aber mit Syntaxfehler

C:\>sed 6s/.\{1\}$/\"/ d:\P0249902.jpl > d:\P0249902.jpl funktioniert nicht.
wegen Syntaxfehler

Machs so:
füge ein Caret ein (^)
C:\>sed 6s/.\{1\}$/\^"/ d:\P0249902.jpl > d:\neuP0249902.jpl  

getestet in der cmd unter XP und es funktioniert.

cu paulepank

EDIT:
Name der Ausgabedatei geändert
Lochkartenstanzer
Lochkartenstanzer 04.01.2013 aktualisiert um 19:15:43 Uhr
Goto Top
Zitat von @Necroscope:

ja wieso kann ich das was auf dem Bildschirm richtig angezeigt wird nicht in eine Datei schreiben?

Weil Du die Ausgabe in eine Datei lenkst, die Du gerade als Input für sed nimmst.

würde ich jetzt vermuten.

lks
Necroscope
Necroscope 07.01.2013 um 11:53:23 Uhr
Goto Top
Zitat von @paulepank:

Machs so:
füge ein Caret ein (^)
C:\>sed 6s/.\{1\}$/\^"/ d:\P0249902.jpl > d:\neuP0249902.jpl  

getestet in der cmd unter XP und es funktioniert.

cu paulepank

EDIT:
Name der Ausgabedatei geändert


Danke so funktioniert es.

ich ändere aber auf .neu. das kann man dann besser mit nem rename *.neu *. lösen.

jetzt bleibt nur noch die Frage wie man den Sed Befehl auf alle Dateien in dem Ordner loslässt.

C:\>sed 6s/.\{1\}$/\^"/ d:\*.jpl > d:\*.neu funktioniert leider nicht wie bei rename.
paulepank
paulepank 08.01.2013 um 22:43:20 Uhr
Goto Top
Hallo,

jetzt bleibt nur noch die Frage wie man den Sed Befehl auf alle Dateien in dem Ordner loslässt.
mit einer FOR-Schleife.
Hilfe dazu u.a. hier im Forum z.B. in einem Tutorial und vielen Beispielen.
Dein eigentliches Problem ist m.E. gelöst.
Deshalb setze diesen Thread als gelöst und bastle an deiner Lösung.
Falls du nicht weiterkommst, veröffentliche deinen Code mit der FOR-Schleife in einem neuen Thread.
Da kann dir dann weitergeholfen werden.

cu paulepank
Necroscope
Necroscope 09.01.2013 um 09:09:51 Uhr
Goto Top
ach ja oh nee for schleife in ner Batch.
OK wird schon schief gehen.

Dankeschön
paulepank
paulepank 09.01.2013 um 11:52:19 Uhr
Goto Top
Hallo,
diesen Thread dann bitte als gelöst markieren
und wozu 'ne Batch, da das Ganze doch ein einmaliger Vorgang ist.
Das kannst du alles in einer Zeile erledigen, die du uns wahrscheinlich in einem neuen Thread vorstellst.

cu paulepank