从* .plist文件iPhone脚本中删除<dict> ... </dict>

时间:2012-07-07 11:40:46

标签: ios bash plist

我想编写一个脚本,从* .plist文件中删除一个指定的dict,但我在互联网上找不到的任何内容都不起作用。有没有办法做到这一点?我试过sed comman但这不起作用

2 个答案:

答案 0 :(得分:1)

  1. 将plist文件读入NSDictionary[Docs]
  2. 创建一个mutableCopy来获取可以使用的词典。
  3. 删除您要删除的项目
  4. 将字典写回磁盘。 [Docs]

答案 1 :(得分:-1)

Sed是一个非常糟糕的工具。试试PlistBuddy,如果它存在于iOS上(它确实存在于MacOS上......);它被称为/ usr / libexec / PlistBuddy,并允许您操作plist文件。

语法有点奇怪,但“条目”似乎是这样解决的:你从plist文件的顶部开始;如果它是一个数组,那么你指定要解决的元素的索引,如果它是一个字典,那么你指定你想要去的键名。用冒号分开这些规格。如果有空格,请将“”放在整个事物周围。

我的示例文件是:

stieber@:~> cat foo.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">

<plist version="1.0">
  <array>
    <dict>
      <key>Sample 1</key>
      <array>
        <string>Sample String 1</string>
        <dict>
          <key>Sample 2</key>
          <string>Sample String 2</string>
        </dict>
      </array>
    </dict>
  </array>

示例会话:

stieber@:~> /usr/libexec/PlistBuddy foo.plist
Command: print
Array {
    Dict {
        Sample 1 = Array {
            Sample String 1
            Dict {
                Sample 2 = Sample String 2
            }
        }
    }
}

Command: print "0:Sample 1:1"
Dict {
    Sample 2 = Sample String 2
}

Command: delete "0:Sample 1:1"
Command: print
Array {
    Dict {
        Sample 1 = Array {
            Sample String 1
        }
    }
}

您也可以在命令行上或通过此处的文档提供命令。互动更容易玩: - )