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"?

smokinguns
fuente
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
Gordon Davisson
fuente