macOS终端/Shell脚本提取深层大型plist中的指定邮箱
在macOS中提取深层plist文件里的TotoEmailAddress字段值
你的问题出在TotoEmailAddress字段不在plist的根层级,直接用print "TotoEmailAddress"找不到目标字段。以下两种方法可以解决这个问题:
方法1:用plutil+jq(推荐,适配任意层级)
先将plist转为JSON格式,再用jq递归查找目标字段:
# 转换plist为JSON并提取邮箱地址 plutil -convert json -o - com.bob.toto.plist | jq '. | .. | .TotoEmailAddress? // empty'
如果你的macOS没有安装jq,可以通过Homebrew安装:brew install jq
方法2:用PlistBuddy+awk(无需额外工具)
直接打印整个plist结构,再通过awk定位目标字段的对应值:
# 遍历plist并提取TotoEmailAddress的值 /usr/libexec/PlistBuddy -c "Print :" com.bob.toto.plist | awk '/TotoEmailAddress/ {getline; print $0}'
原理说明:
- 第一种方法通过
plutil转换格式后,jq的..语法会递归遍历JSON的所有节点,精准匹配TotoEmailAddress键并输出对应值。 - 第二种方法利用PlistBuddy打印完整plist结构的特性,通过awk找到字段名所在行,再读取下一行(即字段值)完成提取。
内容的提问来源于stack exchange,提问作者marciton
相关产品推荐
相关产品推荐

