Đọc các giá trị từ các từ điển lồng nhau trong kịch bản shell


10

Tôi có một tệp plist và tôi quan tâm đến việc tìm nạp các giá trị từ các từ điển lồng nhau bằng cách sử dụng tập lệnh shell. Đây là cấu trúc của tập tin plist của tôi:

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

Tôi quan tâm đến việc tìm nạp giá trị được gán cho khóa "Vốn" nếu người dùng cung cấp tên Quốc gia.
Ví dụ: Nếu tôi thực thi lệnh sau, tôi sẽ nhận được dữ liệu hoàn chỉnh trong từ điển "Quốc gia".

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

Tôi nhận được đầu ra sau đây:

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

Làm cách nào để sửa đổi lệnh ở trên để chuyển khóa "Quốc gia" (ví dụ: Hoa Kỳ) và lấy giá trị cho Khóa "Vốn"


Vì vậy, câu hỏi của bạn là gì? Bạn có gì cho đến nay? Bạn không yêu cầu chúng tôi viết kịch bản cho bạn phải không?
terdon

@terdon: Tôi không yêu cầu ai viết kịch bản cho tôi. Tôi muốn biết liệu có cách trực tiếp để truy cập giá trị của khóa trong từ điển lồng nhau hay không bằng cách sử dụng lệnh "mặc định đọc".
hút thuốc

Câu trả lời:


13

mặc định không thể làm điều này mà không có nhiều thứ lộn xộn, nhưng PlistBuddy sẽ:

/usr/libexec/PlistBuddy -c "print :Countries:USA:Capital" /Users/sameerp/Downloads/data.plist
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.