我会使用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"
然后打印OK...