我会用plutil
代替defaults
。的:
plist="/Applications/TextEdit.app/Contents/Info.plist"
plutil -p - < "$plist"
将打印
... some lines deleted...
"DTSDKName" => "macosx10.12internal"
"DTXcode" => "0800"
"NSHumanReadableCopyright" => "Copyright © 1995-2016, Apple Inc.
All rights reserved."
"DTSDKBuild" => "16C7"
"CFBundleDevelopmentRegion" => "English"
... other delted lines ...
的-p
意味着人类可读的格式 - 这么难的过程。因此,更好的是转换plist
到json
,例如:
plutil -convert json -r -o - - < "$plist"
的-r
意味着转换为人类可读JSON
,例如
{
"CFBundleName" : "TextEdit",
"DTSDKName" : "macosx10.12internal",
"DTXcode" : "0800",
"NSHumanReadableCopyright" : "Copyright © 1995-2016, Apple Inc.\nAll rights reserved.",
"DTSDKBuild" : "16C7",
"CFBundleDevelopmentRegion" : "English",
"CFBundleVersion" : "329",
现在您可以轻松过滤掉NSHumanReadableCopyright
键,即使使用awk
,但它是更好的使用一些真正工具。
的Mac默认已经安装了perl
,也是JSON::PP
模块。所以:
plist="/Applications/TextEdit.app/Contents/Info.plist"
plutil -convert json -r -o - - < "$plist" |\
/usr/bin/perl -0777 -CSDA -MJSON::PP -MEncode -E '$p=decode_json(encode_utf8(<>));say $p->{NSHumanReadableCopyright}'
将输出
Copyright © 1995-2016, Apple Inc.
All rights reserved.
编辑: 测试整个从评论一个长线:
plist="/Applications/TextEdit.app/Contents/Info.plist"; jplist=$(/usr/bin/plutil -convert json -r -o - "$plist"); copyright=$(echo "$jplist" | /usr/bin/perl -0777 -CSDA -MJSON::PP -MEncode -E '$p=decode_json(encode_utf8(<>));say $p->{NSHumanReadableCopyright}'); echo "$copyright"
,并打印好......
我可能暗示引述'“/Applications/TextEdit.app/Contents/Info.plist”'(以防万一与其他处理时,有可能是一个空间应用程序名称,或者$ plist变量没有碰巧是)。 –
这很好。谢谢。然而,没有任何效果的是将JSON plutil输出放入一个变量中,比如jplist,然后回显并将其传递给perl命令。 'jplist = $(/ usr/bin/plutil -convert json -r -o - “$ plist”);' 'copyright = $(echo“$ jplist”|/usr/bin/perl -0777 - CSDA -MJSON :: PP -MEncode -E'$ p = decode_json(encode_utf8(<>)); say $ p - > {NSHumanReadableCopyright}');' 'echo'$ copyright“' (这不是这很重要,因为plutil + perl本身似乎足够快。) – JayB
@JayB看到编辑 - 对我来说工作正常.. – jm666