Chaîne algorithme de tokens ne sera pas tokenize
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
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