Lectura de valores de diccionarios anidados plist en script de shell


10

Tengo un archivo plist y estoy interesado en obtener valores de diccionarios anidados mediante el script de shell. Aquí está la estructura de mi archivo plist:

 <dict>
   <key>Countries</key>
    <dict>
        <key>USA</key>
        <dict>
           <key>Capital</key>
           <string>Washington DC</string>
           <key>Continent</key>
           <string>North America</string>
        </dict>
           <key>Italy</key>
        <dict>
           <key>Capital</key>
           <string>Rome</string>
           <key>Continent</key>
           <string>Europe</string>
        </dict>
    </dict>
 </dict>

Estoy interesado en obtener el valor asignado a la tecla "Capital" si el usuario proporciona un nombre de país.
Por ejemplo, si ejecuto el siguiente comando, obtengo los datos completos en el diccionario "Países".

defaults read "/Users/sameerp/Downloads/data" Countries  2>&1   

Me sale el siguiente resultado:

{
Italy =     {
    Capital = Rome;
    Continent = Europe;
};
USA =     {
    Capital = "Washington DC";
    Continent = "North America";
};
}

¿Cómo modifico el comando anterior para pasarle la tecla "País" (EE. UU., Por ejemplo) y obtener el valor de la tecla "Capital"?


Entonces, ¿cuál es tu pregunta? ¿Qué tienes hasta ahora? No nos estás pidiendo que escribamos el guión para ti, ¿verdad?
— terdon

@terdon: No le pido a nadie que escriba el guión por mí. Quería saber si hay una forma directa de acceder al valor de una clave en el diccionario anidado utilizando el comando "lectura predeterminada".
— smokinguns

Respuestas:


13

los valores predeterminados no pueden hacer esto sin mucho desorden, pero PlistBuddy:

/usr/libexec/PlistBuddy -c "print :Countries:USA:Capital" /Users/sameerp/Downloads/data.plist
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.