Lesen von Werten aus plist verschachtelten Wörterbüchern im Shell-Skript


10

Ich habe eine plist-Datei und möchte mithilfe von Shell-Skripten Werte aus verschachtelten Wörterbüchern abrufen. Hier ist die Struktur meiner plist-Datei:

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

Ich möchte den Wert abrufen, der dem "Groß" -Schlüssel zugewiesen ist, wenn der Benutzer einen Ländernamen angibt.
Wenn ich zum Beispiel den folgenden Befehl ausführe, erhalte ich die vollständigen Daten im "Länder" -Wörterbuch.

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

Ich erhalte folgende Ausgabe:

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

Wie ändere ich den obigen Befehl, um ihm den "Country" -Schlüssel (z. B. USA) zu übergeben und den Wert für "Capital" -Schlüssel abzurufen?


Also, was ist deine Frage? Was hast du bis jetzt Sie bitten uns nicht, das Skript für Sie zu schreiben, richtig?
terdon

@terdon: Ich bitte niemanden, das Drehbuch für mich zu schreiben. Ich wollte wissen, ob es eine direkte Möglichkeit gibt, mit dem Befehl "Defaults Read" auf den Wert eines Schlüssels im verschachtelten Wörterbuch zuzugreifen.
smokinguns

Antworten:


12

Standardeinstellungen können dies nicht ohne viel Chaos tun, aber PlistBuddy wird:

/usr/libexec/PlistBuddy -c "print :Countries:USA:Capital" /Users/sameerp/Downloads/data.plist
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.