Shell-Skript für Austausch von Wörtern in XML-Dateien

Hinweis: In dem Thema Shell-Skript für Austausch von Wörtern in XML-Dateien gibt es 5 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • Hallo,
    ich habe zurzeit folgendes Problem. In einem Verzeichnis liegen einige XML-Dateien, in denen zurzeit Werte hinterlegt sind, die ich gegen ein Wort austauschen möchte. In einem bestimmten XML-Tag steht z.B 1234. Dieses müsste als Beispiel gegen das Wort Hamburg ausgetauscht werden. Ich habe eine zusätzliche Datei, in der die Werte mit den Wörtern hinterlegt ist: ( symikolengetrennte Datei).


    Beispeil
    1234;Hamburg
    5678;Berlin
    ....
    Mein Vorhaben ist ein Skript zu schreiben, welchen die Dateien in einem Verzeichnis durchgeht und die Werte mit der Datei vergleicht und und das Wert durch das Wort ersetzt. Ist das dieses mit einem Shell-Skript möglich?
    Ich bin leider noch ein Anfänger in der Shell-Programmierung. Ich würde mich freuen, wenn ihr mir Ansätze/Hilfen geben könntet, wie ich mein Vorhaben umsetzen könnte.


    Daenk :)

    Für den Inhalt des Beitrages 125206 haftet ausdrücklich der jeweilige Autor: progger_00

  • wie ich mein Vorhaben umsetzen könnte.

    Betonung auf "könnte", da ich dies bzgl. auch keine Erfahrung habe.
    Aber evtl. ist "xmlstarlet" was für dich.
    Ist auch im openSUSE-Repo vorhanden:

    Code
    zypper if xmlstarlet

    Wenn es dir jedoch primär um die Programmierung geht, wirst du mit Sicherheit (von anderen) in diesem Forum professionelle Ansätze erhalten.

    Für den Inhalt des Beitrages 125209 haftet ausdrücklich der jeweilige Autor: sterun

  • Ich denke nicht das Du dafür ein Skript benötigst:

    ...in denen zurzeit Werte hinterlegt sind, die ich gegen ein Wort austauschen möchte.

    Versuche es einfach mit sed oder awk. Sollte bei der einfachen Aufgabenstellung in einer Zeile zu bewerkstelligen sein.
    Ein einfache Einführung in sed findest Du hier.

    be tolerant - not ignorant
    Alle Hunde sind schwarz.
    Es gibt einen Hund der nicht weiß ist.

    Für den Inhalt des Beitrages 125214 haftet ausdrücklich der jeweilige Autor: Boreas

  • Das wäre eine sed- Lösung.


    Generell sind sed und awk auf Stringverarbeitung getrimmt.
    Und eben nicht auf irgendwelche XML Dokumente. Da ist xmlstarlet sicher besser geeignet.
    (Und es gibt richtig gute Python- Programme, die das locker erledigen)


    Die Lösung ist weder getestet (du stellst keine Eingabedatei zur Verfügung), noch sonderlich robust.
    Was passiert, wenn die Werte öfter, oder mehrmals hintereinander vorkommen, ist zwar klar, wird aber nicht gefallen, denke ich.


    In @steruns Befehl sollte statt if in stehen.

  • Moinsen,


    Du holst Dir die zusätzliche Datei und liest sie in einer Schleife zeilenweise ein. zusätzlich würde ich zuvor die xml Dateien die ich ändern möchte in einer Hilfsdatei speichern und auf dieser arbeiten.
    Dann schneidest Du den Zeileninhalt bis zum Semikolon (geht üblicherweise mit ${j%%;*}, wenn j Deine Zeilenlaufvariable in der Schleife ist), das ist Dein 'Suchparameter' für die XML Dateien, die Du alle ändern willst.


    Zusätzlich schneide den Zeileninhalt AB dem Semikolon ab (geht üblicherweise mit ${j##*;} wenn j Deine Zeilenlaufvariable in der Schleife ist. Das ## ist wichtig, damit nur bis zum ersten auftreten des Semikolon gearbeitet wird.), das ist Dein Ersetzwert für die xml Dateien.


    Mit %% arbeitest Du Dich quasi von links nach Rechts durch die Zeile und stoppst am ersten ;, mit ## arbeitest du dich von rechts nach links durch die Zeile und stoppst wieder am ersten ;



    Danach musst Du nur noch mit dem SED arbeiten und überall in jeder xml Datei in dem Verzeichnis den Suchparameter durch den Ersetzwert ersetzen und fertig bist Du.

    Viele Grüße,
    T.

    Einmal editiert, zuletzt von Tamerlain ()

    Für den Inhalt des Beitrages 125289 haftet ausdrücklich der jeweilige Autor: Tamerlain