Frage

Morgen alle, Ich schreibe eine Bash-Skript die Werte bestimmter XML-Tags aus allen Dateien in einem bestimmten Verzeichnis zu extrahieren. Ich habe beschlossen, dies zu tun, indem jede Zeile tokenising und Rückkehr th4e relavent Token. Das Problem ist, dass es nicht richtig ist tokenising und ich kann nicht so recht geklappt, warum. Hier ist das kleinste Beispiel, dass ich das rekonstruiert das Problem machen könnte

#!/bin/bash
for file in `ls $MY_DIRECTORY`
do
    for line in `cat $MY_DIRECTORY/$file`
    do
        LOCALIFS=$IFS
        IFS=<>\"

        TOKENS=( $line )
        IFS=$LOCALIFS
        echo "Token 0: ${TOKENS[0]}" 
        echo "Token 1: ${TOKENS[1]}" 
        echo "Token 2: ${TOKENS[2]}" 
        echo "Token 3: ${TOKENS[3]}" 

    done
 done

Ich bin das Problem zu erraten ist mit meinem Hantieren mit IFS in einer Schleife zu tun, die selbst nutzt IFS (das heißt die Katze Operation), aber das war nie ein Problem vor.
Irgendwelche Ideen?

Danke, Rik

War es hilfreich?

Lösung

Verwenden Sie ein besseres Werkzeug zum Parsen von XML, im Idealfall sollte es ein Parser sein, aber wenn Ihre Anforderung einfach ist und Sie wissen, wie Ihre xml strukturiert ist, einfach String-Manipulation könnte ausreichen. Zum Beispiel XML-Datei und Sie mögen Wert von tag3 bekommen

$  cat file
blah
<tag1>value1 </tag1>
<tag2>value2 </tag2>
<tag3>value3
</tag3>
blah

$ awk -vRS="</tag3>" '/tag2/{ gsub(/.*tag3>/,"");print}' file
value3

so zu iterieren Ihr Verzeichnis

for file in *.xml
do
  value="$(awk -vRS="</tag3>" '/tag2/{ gsub(/.*tag3>/,"");print}' "$file" )"
  echo "$value"
done 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top