ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
923
923
EMPFEHLEN
-
Hallo Leute!
Ich bin mir nicht sicher ob ich hier im Forum mit meiner Frage richtig bin, aber ich versuche es einmal.
Mein Problem ist, dass ich in einer XML Datei ein bestimmtes Wort ersetzen muss. Das wäre ja nicht schlimm und auch ziemlich einfach, aber ich habe keinen Anhaltspunkt, wie ich das Wort suchen soll. Das Problem in dieser Datei ist nämlich, dass die Schlüsselwörter "<key>" und "<value>" immer vorkommen. Zur Veranschaulichung:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
<dictionary> <key>org.eclipse.cdt.make.core.build.arguments</key> <value></value> </dictionary> <dictionary> <key>org.eclipse.cdt.make.core.buildLocation</key> <value>D:/work/unified/sdk_ansi_c/sdk/examples/demoserver</value> </dictionary> <dictionary> <key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key> <value>false</value> </dictionary> <dictionary> <key>org.eclipse.cdt.make.core.environment</key> <value>VERBOSE=1|</value> <value></value> </dictionary> <dictionary> <key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key> <value>false</value> </dictionary>
So sieht die Datei aus ^. Ich möchte jetzt mit sed den value false (von org.eclipse.cdt.make.core.useDefaultBuildCmd) auf true ersetzen. Wie kann ich das denn machen? Hat da jemand eine Hilfe für mich?
Ich habe es so versucht:
Code :1
sed -i -e "s/\(<key>org.eclipse.cdt.make.core.useDefaultBuildCmd<\/key>\n<value>false<\/value>\)\(./\<key>org.eclipse.cdt.make.core.useDefaultBuildCmd<\/key>\n<value>true<\/value>/" .project
Bitte um euere Hilfe
Gruß Buba-- Wer auch nur etwas Freiheit für mehr Sicherheit aufgibt, ist beides nicht wert! --
-
07.08.09 14:24 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Warum willst du das mit sed machen? Warum nimmst du nicht einen XSLT Prozessor (xsltproc o.ä.)?
GrußCode :1 2 3
/<key>org.eclipse.cdt.make.core.useDefaultBuildCmd<\/key>/,/<\/value>/{ s,<value>[^<]*</value>,<value>true</value>, }If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hallo!
Aus dem einfachen Grund, weil ich nur die cygwin bash habe und nur dieses false auf true setzen will. Ich generiere nämlich vorher ziemlich viele Dinge und die einzige Sicherheit ist sed, die auf jeder Maschine vorhanden ist.-- Wer auch nur etwas Freiheit für mehr Sicherheit aufgibt, ist beides nicht wert! --
-
09.08.09 16:38 #4
- Registriert seit
- Jul 2003
- Ort
- Montreal (Quebec)
- Beiträge
- 1.667
Sed arbeitet zeilenorientiert, d.h. damit wird das nicht so ohne weiteres gehen. Guck Dir mal awk an, das ist ziemlich mächtig und in den GNU-Utils enthalten.
Oder aber Du ersetzt in mehreren Durchläufen das Linefeed von Zeilen innerhalb entsprechender Tags durch ein eindeutiges Zeichen[Tupel], lässt sed nochmal drüberlaufen und setzt dann das Linefeed wieder ein.
Die Lösung mit awk wäre eleganter.
-
17.08.09 21:16 #5
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
@Buba235: bitte markier doch deine Themen als erledigt wenn deine Frage beantwortet ist.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Es geht schon mit sed, alledings siehts dann ein bisschen komplizierter aus:
Code :1
sed -i -e '/key/N;s/\(<key>org.eclipse.cdt.make.core.useDefaultBuildCmd<\/key>.*<value>\)false\(<\/value\)/\1true\2/' .project
Als Erklärung:
Zuerst suchen wir nach dem Wort "key", dann fügen wir die nächste Zeile zum aktiven String hinzu.
Zuletzt kommt dann das Ersetzen über mehrere Zeilen.
Folgende Seite hilft mir bei Sed Fragen in 99% weiter:
http://main.rtfiber.com.tw/~changyj/sed/
GrussGeändert von olqs (31.08.09 um 16:12 Uhr)
Ähnliche Themen
-
JasperReport: Wenn eine Zeile im Detail mehr Platz braucht alle Zeilen vergrössern
Von jeipack im Forum JavaAntworten: 2Letzter Beitrag: 04.05.09, 14:14 -
Eine Zeile ausgeben und nach Klick noch zwei mehr
Von mkoeni1 im Forum PHPAntworten: 5Letzter Beitrag: 12.10.07, 15:09 -
Eine Zeile
Von rgofi im Forum PHPAntworten: 5Letzter Beitrag: 14.03.07, 09:07 -
Execl: Komplette Zeile mit mehreren Zellen in eine andere Zeile anzeigen lassen!
Von IchZappel im Forum Office-AnwendungenAntworten: 6Letzter Beitrag: 29.01.07, 09:49 -
Eine View über eine ganze Splitterframe legen
Von tt5 im Forum VisualStudio & MFCAntworten: 1Letzter Beitrag: 25.10.05, 13:24





Zitieren

Login





