Tengo un archivo xml como el siguiente, necesito «en» el uso de algunos comandos de unix.

        <void method="put">
            <string>LANGUAGE</string>
            <string>en</string>
        </void>    

usando el siguiente comando (consiguió de algún enlace en google),

sed -n '/string/{s/.*<string>//;s/<\/string.*//;p;}' Locale.xml

Estoy recibiendo de salida como

LANGUAGE
en

lo que he usado

sed -n '/string/{s/.*<string>//;s/<\/string.*//;p;}' Locale.xml | tail -1

Pero, ¿hay alguna opción en el sed por lo que puedo conseguir el segundo valor sólo?

  • El uso de un analizador de XML podría ser una mejor opción.
  • exacto el caso de uso de xpath. si usted necesita para envolver con un script de shell, puede utilizar la herramienta de xmllint con --xpath. No puedo sugerir más antes de ver su estructura del documento. No intente usar awk/sed/grep en un xml, si desea que su secuencia de comandos para ser estable. también puede utilizar dichos, aunque, para una rápida y sucia de disparo/prueba.
  • XML no es un lenguaje regular, lo que significa que usted no puede coincidir con sus estructuras con las expresiones regulares de forma efectiva.
  • Consulte Grep y Sed Equivalente para el XML de la Línea de Comandos de Procesamiento
InformationsquelleAutor user2800089 | 2014-04-28

4 Comentarios

  1. 1

    Puede utilizar este sed,

    sed -n '/LANGUAGE/{N; s/.*<string>\(.*\)<\/string>.*//p; }' Locale.xml
  2. 2

    Uso xmlstarlet.

    $ cat x.xml 
    <?xml version="1.0"?>
    <void method="put">
      <string>LANGUAGE</string>
      <string>en</string>
    </void>
    $ xmlstarlet sel -t -c '/void/string[2]/text()' x.xml
    en

    O uso xmllint.

    $ xmllint --xpath '/void/string[2]/text()' x.xml
    en

    Más acerca de XPath.

  3. 1

    Puede buscar LANGUAGE y la impresión de la siguiente línea:

    awk -F"[<>]" '/LANGUAGE/{getline;print $3}' Locale.xml 
    en

    O búsqueda de string de impresión y el último:

    awk -F"[<>]" '/string/{f=$3} END {print f}' Locale.xml
    en

Dejar respuesta

Please enter your comment!
Please enter your name here