algoritmo String tokenizzazione no tokenize
Domanda
Mattina tutto, Sto scrivendo uno script bash per estrarre i valori di alcuni tag XML da tutti i file in una determinata directory. Ho deciso di fare questo tokenising ogni riga e il ritorno th4e relavent token. Il problema è che non è tokenising correttamente e non riesco a capire perché. Ecco l'esempio più piccolo che avrei potuto fare che ricostruisce la questione
#!/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
sto cercando di indovinare il problema è a che fare con la mia giocherellare con IFS all'interno di un ciclo che si utilizza IFS (vale a dire l'operazione di gatto), ma questo non è mai stato un problema prima.
Tutte le idee?
Grazie, Rik
Soluzione
Utilizzare uno strumento migliore per XML analizzano, idealmente dovrebbe essere un parser, ma se la vostra esigenza è semplice e non si sa come il vostro XML è strutturato, semplice manipolazione di stringhe potrebbe essere sufficiente. Ad esempio, file XML e si desidera ottenere valore tag3
$ cat file
blah
<tag1>value1 </tag1>
<tag2>value2 </tag2>
<tag3>value3
</tag3>
blah
$ awk -vRS="</tag3>" '/tag2/{ gsub(/.*tag3>/,"");print}' file
value3
in modo di iterare vostra directory
for file in *.xml
do
value="$(awk -vRS="</tag3>" '/tag2/{ gsub(/.*tag3>/,"");print}' "$file" )"
echo "$value"
done