sed -i befehl funktioniert nicht

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Rattlesnake
Beiträge: 17
Registriert: 20.06.2007 09:24:12

sed -i befehl funktioniert nicht

Beitrag von Rattlesnake » 27.05.2011 09:45:40

Hi @all,

hab folgende Zeile in einem Script:

Code: Alles auswählen

<driver name='qemu' type='raw'/>
diese müsste ich mit sed -i folgendermaßen erweitern

Code: Alles auswählen

<driver name='qemu' type='raw' cache='writeback'/>
Nun habe ich folgende Lösung die aber nicht richtig funktioniert:

Code: Alles auswählen

sed -i 's/\<driver\ name\=\'qemu\'\ type\=\'raw\'\/\>/\<driver\ name\=\'qemu\'\ type\=\'raw\'\ cache\=\'writeback\'\/\>/g' filename
Bei diesem Befehl komme ich aber immer in eine neues "Promt" >

Hat jemand einen Tipp / Hinweis für mich was ich falsch mache bzw. eine Lösung?

Danke schonmal für die Hilfe

Mfg
Rattlesnake

dimi
Beiträge: 84
Registriert: 19.07.2006 14:09:55

Re: sed -i befehl funktioniert nicht

Beitrag von dimi » 27.05.2011 12:01:51

Du hast wohl einen Packen Backslashes im Sonderangebot erhalten ;)

Code: Alles auswählen

sed -i "s,\(<driver name='qemu' type='raw'\)/>,\1 cache='writeback'/>,g" filename 
Die Quotes kann man in der Shell nur jeweils mit dem anderem Paar als String erhalten. Wenn Du ein ' möchtest, musst Du "'" schreiben. Bei der Verwendung von '\'' erhält man ein \ und ein ungeschlossenes ' und damit einen Prompt um das schließende ' hinzuzufügen.

Benutzeravatar
Meillo
Moderator
Beiträge: 9247
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: sed -i befehl funktioniert nicht

Beitrag von Meillo » 27.05.2011 12:02:30

Rattlesnake hat geschrieben:

Code: Alles auswählen

<driver name='qemu' type='raw'/>
diese müsste ich mit sed -i folgendermaßen erweitern

Code: Alles auswählen

<driver name='qemu' type='raw' cache='writeback'/>

Code: Alles auswählen

sed -i "/<driver name='qemu' type='raw'\/>/s,/, cache='writeback'/,"
Nun habe ich folgende Lösung die aber nicht richtig funktioniert:

Code: Alles auswählen

sed -i 's/\<driver\ name\=\'qemu\'\ type\=\'raw\'\/\>/\<driver\ name\=\'qemu\'\ type\=\'raw\'\ cache\=\'writeback\'\/\>/g' filename
Bei diesem Befehl komme ich aber immer in eine neues "Promt" >

Hat jemand einen Tipp / Hinweis für mich was ich falsch mache bzw. eine Lösung?
Nur mal ein paar Anerkungen:
- In singlequoted Strings kann man keine Singlequotes escapen.
- Du escapest Zeichen die nicht escaped werden muessen. `\<' z.B. bedeutet ``Anfang eines Wortes'' und nicht das Kleinerzeichen.
- Der Modifier `g' wird sehr oft, wie auch hier, unnoetig verwendet.


EDIT:
dimis Version ist besser.
Use ed once in a while!

Rattlesnake
Beiträge: 17
Registriert: 20.06.2007 09:24:12

Re: sed -i befehl funktioniert nicht

Beitrag von Rattlesnake » 27.05.2011 13:59:32

Hi ihr zwei,

danke für eure schnelle Hilfe :)

Ich dachte man muss jedes "Sonderzeichen" escapen... Aber bin jetzt wieder schlauer ;)

Es funktioniert alles einwadfrei :)


Mfg
Rattlesnake

Benutzeravatar
Meillo
Moderator
Beiträge: 9247
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: sed -i befehl funktioniert nicht

Beitrag von Meillo » 27.05.2011 14:26:13

Rattlesnake hat geschrieben: Ich dachte man muss jedes "Sonderzeichen" escapen...
Das kann man schon so formulieren ... die Frage ist halt welche Sonderzeichen du meinst. Die Sonderzeichen der (jeweiligen Art von) RegExps musst du schon escapen wenn du sie literal meinst. ;-)
Use ed once in a while!

Antworten