Pregunta

Mañana todo, Estoy escribiendo un script bash para extraer los valores de ciertas etiquetas XML de todos los archivos en un directorio dado. He decidido hacer esto por tokenising cada línea y volver th4e relavent token. El problema es que no se tokenising correctamente y no puedo bastante entender por qué. Aquí está el ejemplo más pequeño que yo podría hacer que reconstruye el tema

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

Estoy adivinando el problema tiene que ver con mi jugando con IFS dentro de un bucle que a su vez utiliza IFS (es decir, la operación de gato), pero esto nunca ha sido un problema antes.
Algunas ideas?

Gracias, Rik

¿Fue útil?

Solución

Usar una mejor herramienta para XML analizan, lo ideal es que sea un programa de análisis, pero si su requerimiento es simple y usted sabe cómo está estructurado el código XML, puede ser suficiente la manipulación de cadenas simples. Por ejemplo, un archivo XML y desea obtener valor de tag3

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

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

así que para iterar sobre el directorio

for file in *.xml
do
  value="$(awk -vRS="</tag3>" '/tag2/{ gsub(/.*tag3>/,"");print}' "$file" )"
  echo "$value"
done 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top