track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Grundsätzlich teile ich die Einwände von Lysander mitlerweile, weil, wie ich oben schon sagte: XML .. da sind Zeilen Schall und Rauch ...
Allerdings ist die Lösung, die user unknown vorgeschlagen hat, tatsächlich ziemlich sauber hinsichtlich der XML-Sruktur:
sed -i "/<overwrite>.\?<\/overwrite>$/a\ <ownb>1</ownb>" ~/.vagalume/config.xml Das prüft ja gerade, ob der <overwrite>-Knoten vollständig vorhanden ist, und fügt direkt dahinter einen vollständigen Knoten ein. Damit wird hier die Tag-Struktur sauber beachtet ! Und falls der Zeilenumbruch nach dem <overwrite>-Knoten fehlt, dann versagt der Befehl eben, und macht einfach gar nichts. (das ist dann zwar nicht im Sinne des Erfinders, macht aber auch nichts kaputt) (Im Wiki steht allerdings jetzt doch wieder so ein windiger, unsauberer Befehl ! ) 🙄 track
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
Lysander schrieb: user unknown schrieb: Wenn die XML-Datei von einem Programm erzeugt wird, dann doch wohl immer wieder auf die gleiche Weise.
Das ist sicherlich nicht garantiert.
Garantiert wird überhaupt wenig - auch dass es wohlgeformtes XML ist sicherlich nicht. Wahrscheinlich kannst Du ein paar Beispiele benennen, wo Konfigurationsdateien im XML-Format geschrieben werden, mal mit Zeilenumbrüchen im Tag, und mal ohne? Ich habe sowas noch nicht gesehen, aber wer bin ich schon!
@Heinrich Schwietering Ich würde stets das idiomatisch richtige Werkzeug benutzen. Es mag mehr Aufwand beim Installieren machen, dafür hat man einfach weniger Ärger.
Ich würde xmlstartlet vielleicht auch benutzen, wenn ich nicht den Sedausdruck schneller fertig hätte, als die manpage für xmlstarlet zu öffnen. ☺
Allerdings ist die Lösung, die user unknown vorgeschlagen hat, tatsächlich ziemlich sauber hinsichtlich der XML-Sruktur:
Das sieht mir aber nicht ganz nach dem aus, was ich geschrieben habe. 😉
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
user unknown schrieb: Allerdings ist die Lösung, die user unknown vorgeschlagen hat, tatsächlich ziemlich sauber hinsichtlich der XML-Sruktur:
Das sieht mir aber nicht ganz nach dem aus, was ich geschrieben habe. 😉
Nein, ich habe genau 2 Details noch nachgebessert:
die 0 zum .\? verallgemeinert (also: kein oder 1 beliebiges Zeichen statt nur der konkreten "0" wird erkannt) und den Ausdruck mit dem $ am Zeilenende festgetackert, dadurch sind weitere Ausdrücke dahinter ausgeschlossen. (denn es könnte sonst ja theoretisch passieren, dass in der Zeile dahinter noch irgend etwas anderes, vielleicht ein anderer Tag stünde und dann dürfte das ja nicht einfach ersetzt werden.)
Also nur handwerkliche Nacharbeiten, mehr nicht. track
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
Aufgabe war aber, ein
zu matchen, nicht ein <overwrite>2</overwrite> oder <overwrite>foo</overwrite>. Womöglich ist das gewollt, womöglich nicht. Habe ich eine Klärung dazu überlesen? Da es hieß "nach dieser Zeile" scheint das $ gerechtfertigt, aber ist nach dem schließenden Tag nicht Whitespace möglich? Beim Transfer mit Cut'n'paste geht sowas ja leicht mal verloren, daher hätte ich nicht zu einem Zeilenende unmittelbar nach dem schließenden Tag gegriffen, aber wenn das falsch wäre würde man es wohl rasch merken - beides. Daher ist es nicht tragisch. Aber die Notwendigkeit einer Korrektur sehe ich auch nicht.
|
Heinrich_Schwietering
Wikiteam
(Themenstarter)
Anmeldungsdatum: 12. November 2005
Beiträge: 11290
Wohnort: Bremen
|
Hi! Der "windig unsaubere Befehl" im Wiki ist - selbstredend - von mir; und der Hintergrund war genau der, dass es unabhängig davon funktionieren sollte, was im "overwrite-tag" (oder wie das Teil auch genau heißen mag 😉) in der Mitte für ein Wert steht... Wahrscheinlich ist es dann doch einfacher, bei der Lösung mit dem Editor zu bleiben 🙄 track schrieb:
die 0 zum .\? verallgemeinert (also: kein oder 1 beliebiges Zeichen statt nur der konkreten "0" wird erkannt) und
Theoretisch könnte ja auch etwas wie 155 drin stehen, wer weiß das schon so genau (nein, in diesem Falle nicht, aber in dem ownb-Tag könnte es tatsächlich vorkommen...)
2. den Ausdruck mit dem $ am Zeilenende festgetackert, dadurch sind weitere Ausdrücke dahinter ausgeschlossen. (denn es könnte sonst ja theoretisch passieren, dass in der Zeile dahinter noch irgend etwas anderes, vielleicht ein anderer Tag stünde und dann dürfte das ja nicht einfach ersetzt werden.)
"Ersetzt" wird soweit ich es verstehe, mit dem sed-Befehl im Wiki gar nichts, sondern nur eine Zeile (in diesem Falle mit einem tag als Inhalt) nach dem Vorkommen von overwrite> eingefügt. overwrite> kommt in der besagten config.xml zweimal vor, beide Male in der Zeile - oh, pardon - dem tag, nach dem der ownb-tag eingefügt werden soll. Die "Gefahr" einer "Fehlerplatzierung" ist also hier - ganz praktisch betrachtet - definitiv nicht gegeben (weil dort ja immer nur ein tag pro Zeile steht 😇 )... Aber ich hab die xmlstarlet-Version ja auch noch eingebaut... so long hank
|
Lysander
Anmeldungsdatum: 30. Juli 2008
Beiträge: 2669
Wohnort: Hamburg
|
user unknown schrieb: Ich habe sowas noch nicht gesehen, aber wer bin ich schon!
Manchmal ein sturer Bock 😉 Das Problem von sed -Jüngern ist doch, dass sie das alles immer schnell aus der Hüfte hinbekommen. Ist ja auch toll, wenn etwas nur einfach mal so auf die schnelle klappen muss. Für dauerhafte Lösungen ist das aber nun einmal nicht immer empfehlenswert.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
Lysander schrieb: user unknown schrieb: Ich habe sowas noch nicht gesehen, aber wer bin ich schon!
Manchmal ein sturer Bock 😉
Sturer Bock lasse ich mir gefallen ...
Das Problem von sed -Jüngern ist doch,
... Jünger jedoch nicht, sowenig wie Fanboy. Sed ist einfach ein praktisches Werkzeug. Wenn das XML nicht per Programm automatisiert generiert wird, oder es wird generiert, aber die Ausdrücke spannen sich über mehrere Zeilen, dann gebe ich Dir ja Recht mit xmlstarlet...
dass sie das alles immer schnell aus der Hüfte hinbekommen. Ist ja auch toll, wenn etwas nur einfach mal so auf die schnelle klappen muss. Für dauerhafte Lösungen ist das aber nun einmal nicht immer empfehlenswert.
... aber mit dauerhaft oder nicht hat es nichts zu tun. Ob XML etwas dauerhaftes wird - wir werden es sehen. ☺
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Heinrich Schwietering schrieb: ... Die "Gefahr" einer "Fehlerplatzierung" ist also hier - ganz praktisch betrachtet - definitiv nicht gegeben (weil dort ja immer nur ein tag pro Zeile steht 😇 )... Aber ich hab die xmlstarlet-Version ja auch noch eingebaut...
Im Sinne des Wiki und des mündigen Benutzers desselben wäre hier wahrscheinlich eine vollständig händische Anleitung das sinnvollste. Also die Anleitung, diese eine Zeile an der genannten Stelle selber mit einem Editor einzufügen. Dann wird der Nutzer nicht verleitet. irgendwelche Befehle "blind" nach Win..-Manier auszuführen, jegliche Fehlfunktion wird verhindert (was passiert eigentlich, wenn jemand "vorsichtshalber" den sed-Befehl 2x ausführt, oder 3x ...? - dann "repariert" er die XML-Datei doch kaputt, oder ? Denn korrekterweise müsste solcher automatische Befehl eigentlich vorher abprüfen, ob der neue Tag schon existiert, damit er nicht hinterher mehrfach in der Datei steht.) Statt dessen sieht er klar und graphisch vor Augen was da fehlt und setzt es ein. (oder auch nicht, wenn es schon da steht) Fertig ! (ohne xmlstarlet, ohne die sed- Problematik und ohne die Gefahr einer Fehlfunktion) - Meine 1½ Cent aus der Sicht des Wiki - track
|
Heinrich_Schwietering
Wikiteam
(Themenstarter)
Anmeldungsdatum: 12. November 2005
Beiträge: 11290
Wohnort: Bremen
|
Hi! @ track Jo, im Prinzip hast du Recht; war wohl im Zuge anderer Überlegungen zu xsane2speech auf "Automatismen" fixiert 😉 (wobei natürlich interessant wäre, was passiert wenn mehrere ownb-tags existieren 🤓 ) Werde das also wieder "rückbauen", ggf. mit Link hier her, als Info für den "mündigen Benutzer". so long hank
|