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

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

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.
  • Shell-Skript für Austausch von Wörtern in XML-Dateien

    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

  • progger_00 schrieb:

    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:

    Quellcode

    1. 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.
    Zitat Albert Einstein:
    "Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit,
    aber bei dem Universum bin ich mir noch nicht ganz sicher."

    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:

    progger_00 schrieb:

    ...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

  • Shell-Script

    1. input_file=/pfad/zu/Imputfile
    2. while read line; do
    3. # das Wort aus "line" speichern
    4. wort=${line#*;}
    5. # die Zahl aus "line" holen
    6. wert=${line%;*}
    7. # mit "sed" -inline mit -regex ersetzen
    8. sed -ri 's/'"$wert"'/'"$wort"'/g' $tempfile
    9. done < $input_file
    Alles anzeigen
    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.
    Sokrates sagte, dass er nichts wisse.
    Ich bin viel, viel klüger als Sokrates.
    Ich weiß ganz genau, dass ich gar nichts weiß.

    Für den Inhalt des Beitrages 125243 haftet ausdrücklich der jeweilige Autor: Berichtigung

  • 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.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Tamerlain ()

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