Text ersetzten mit sed - besonderheit zeilenumbruch

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
aLiEnTxC
Beiträge: 126
Registriert: 31.07.2004 20:06:04
Kontaktdaten:

Text ersetzten mit sed - besonderheit zeilenumbruch

Beitrag von aLiEnTxC » 29.04.2005 15:35:57

Hallo Forum,

ich versuche gerade an einer bestimmten stelle in einer inf-datei etwas einzufügen.

Dabei dachte ich an sed... da es dafür einen windows port gibt habe ich mir das gleich gezogen. Aber ob unter linux oder windows... das ding ist sehr stark, man muss nur wissen wieman es benutzt... genau das ist mein problem.

Also folgendes:

Im Abschnitt [SetupHotfixesToRun] soll genau darunter neue einträge eingefügt werden.

Das habe ich mal so versucht:

Code: Alles auswählen

sed "s/\[SetupHotfixesToRun\].*/\[SetupHotfixesToRun\]^Mdotnetfx.exe^Mdx9c.exe^Mwmp10.exe/g" svcpack.inf
Das Problem ist nur, das er mir den Zeilenumbruch nicht macht... weder das \n noch das ^M wird irgendwie interpretiert.

Hat damit schonmal jemand erfahrung gemacht,bzw weiss jemand wie es funktionieren sollte? Hab jetzt schon fast alle kombinationen duch die mir eingefallen sind..

Danke schonmal im voraus.

Gruß,
Thomas

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 29.04.2005 16:02:27

Code: Alles auswählen

sed -e '/^[SetupHotfixesToRun]/ {a Sobig.exe
ILOVEYOU.TXT.VBS
W32Blaster.exe
}' -i Datei
Wie du unter Windows die Zeilenumbrüche in die Kommandozeile bekommst, weiss ich jetzt nicht.

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 29.04.2005 16:06:07

Hm, nur am Rande: fuer DOS/Windows musst du "\r\n" statt "\n" benutzen.

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 29.04.2005 16:10:52

Da die letzte } eh in einer Zeile alleine stehen muss, musst du auf jeden Fall Windoof dazu bringen, eine Kommandozeile über Enter hinaus zu akzeptieren. Wenn das nicht geht, kannst du statt -e '....' den Inhalt (....) in eine Datei schreiben und dann sed -f skript -i Datei machen.
um \n brauchst du dich dann nicht zu kümmern.

aLiEnTxC
Beiträge: 126
Registriert: 31.07.2004 20:06:04
Kontaktdaten:

Beitrag von aLiEnTxC » 29.04.2005 16:11:42

lustig lustig ;-)

Aber leider funzt das mit dembeschränktem windows nicht...

also die { } mag es nicht...

er führt zeile für zeile alleine aus :-(

Noch eine Idee?

aLiEnTxC
Beiträge: 126
Registriert: 31.07.2004 20:06:04
Kontaktdaten:

Beitrag von aLiEnTxC » 29.04.2005 16:13:01

@Joghurt

wie genau meinst du das ? das hört sich super an

[EDIT]

OK.. habs herausgefunden...

aber ich glaub das will so nicht richtig...

also habe eine sed.txt erstellt

Code: Alles auswählen

/^[SetupHotfixesToRun]/ {a Sobig.exe
ILOVEYOU.TXT.VBS
W32Blaster.exe
}
und dann auf der shell sed -f sed.txt svcpack.inf ausgeführt

aber da kam dann nur
sed: file sed.txt line 1: Extra characters after command
[/EDIT]
Zuletzt geändert von aLiEnTxC am 29.04.2005 16:19:35, insgesamt 1-mal geändert.

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 29.04.2005 16:18:18

Das Skript, also das was du nach -e hast in ne Datei und sed dann so aufrufen:

Code: Alles auswählen

sed -f deinksriptfile.txt -i Datei

aLiEnTxC
Beiträge: 126
Registriert: 31.07.2004 20:06:04
Kontaktdaten:

Beitrag von aLiEnTxC » 29.04.2005 16:32:55

also hab jetzt mal nochmal mein erstes beispiel her gezogen und versucht das mit dem ganzen zu verbauen

also inhalt von sed2.txt

Code: Alles auswählen

s/^\[SetupHotfixesToRun\]/\[SetupHotfixesToRun\]\r\ndotnetfx.exe\r\ndx9c.exe\r\nwmp10.exe/g
und dann per shell sed -f sed2.txt svcpack.inf ausgeführt.

das ergebnis ist nach wie vor

Code: Alles auswählen

...
CatalogSubDir="\I386\svcpack"
[SetupHotfixesToRun]rndotnetfx.exerndx9c.exernwmp10.exe
kb893803.exe /q /n /z /o
....
8O

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 29.04.2005 23:41:06

aLiEnTxC hat geschrieben:sed: file sed.txt line 1: Extra characters after command
Versuch mal, direkt nach dem a schon eine neue Zeile zu starten.

kotti
Beiträge: 1
Registriert: 30.04.2005 19:54:16
Wohnort: ludwigshafen
Kontaktdaten:

Beitrag von kotti » 30.04.2005 20:07:33

nimm mal ein anderes sed, damit gehts.

http://sed.sourceforge.net/

GNU sed v3.02.80 for Windows (3x, 9x, NT, 2K)
-> http://www.student.northpark.edu/pement ... d3028a.zip

Code: Alles auswählen


C:\>sed -V
GNU sed version 3.02.80

Copyright (C) 1999 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
to the extent permitted by law.

C:\>cat svcpack.inf
[foo]

[bar]

[SetupHotfixesToRun]

[foo2]

C:\>sed "s/^\[SetupHotfixesToRun\]/\[SetupHotfixesToRun\]\noption 1\noption 2/g"
svcpack.inf
[foo]

[bar]

[SetupHotfixesToRun]
option 1
option 2

[foo2]

aLiEnTxC
Beiträge: 126
Registriert: 31.07.2004 20:06:04
Kontaktdaten:

Beitrag von aLiEnTxC » 01.05.2005 03:11:08

juppy!! Super!

Kommt genau richtig... habe gerade wieder daran angefangen..

Danke.

Gruß,
Thomas

Antworten