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

È stato utile?

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 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top