Question

Matin tout, Je suis en train d'écrire un script bash pour extraire les valeurs de certaines balises XML de tous les fichiers dans un répertoire donné. J'ai décidé de le faire en tokenising chaque ligne et retour th4e relavent jeton. Le problème est qu'il ne soit pas tokenising correctement et je ne peux pas travailler tout à fait pourquoi. Voici l'exemple le plus petit que je pouvais faire qui reconstitue la question

#!/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

Je suppose que la question est de faire avec mon tripotait IFS dans une boucle qui utilise elle-même IFS (à savoir le fonctionnement de chat), mais cela n'a jamais été un problème auparavant.
Toutes les idées?

Merci, Rik

Était-ce utile?

La solution

Utilisez un meilleur outil pour XML Parse, idéalement, il devrait être un analyseur, mais si votre exigence est simple et vous savez comment votre xml est structuré, la manipulation de chaînes simple peut suffire. Par exemple, le fichier xml et que vous voulez obtenir la valeur de tag3

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

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

itérer sur votre répertoire

for file in *.xml
do
  value="$(awk -vRS="</tag3>" '/tag2/{ gsub(/.*tag3>/,"");print}' "$file" )"
  echo "$value"
done 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top