如何在macOS中从system_profiler打印软件标题和安装日期?

时间:2019-04-10 15:49:08

标签: macos awk sed grep

我正在设置一个txt /日志文件,该文件将存储来自system_profiler SPInstallHistoryDataType的信息,这些信息与“安全更新”和“ macOS 10.xx更新”以及安装日期相匹配,因此我可以将该信息推送到我们的MDM解决方案。

当我跑步时 system_profiler SPInstallHistoryDataType | grep "Security" 我只得到

的输出
Security Update 2017-001:
Security Update 2018-001:
Security Update 2018-001:

仅运行system_profiler SPInstallHistoryDataType时,您将获得类似于

的输出

Output of system_profiler SPInstallHistoryDataType

    macOS 10.14.3 Update

        Source: Apple
        Install Date: 2/3/19, 3:11 PM

    GarageBand

        Version: 10.1.3
        Source: Apple
        Install Date: 1/31/19, 4:48 PM

    Google Drive File Stream:

       Source: 3rd Party
       Install Date: 3/3/19, 11:30 AM


我正在尝试获得

Security Update 2017-001,2018-02-31 18:11
macOS 10.14.3 Update,2019-02-03 15:11

任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:0)

这可能可以优化很多,但是您可以使用:

system_profiler SPInstallHistoryDataType | grep -A 4 "macOS\|Security" | grep "macOS\|Security\|Install Date" | tr '\n' ' ' | sed -e 's/[AP]M/&\
/g' | sed -e 's/Install Date://g' | tr -s ' '

要稍微说明一下,请对'macOS'和'Security'进行grep表示,并允许以下4行返回。

然后,您通过grep将其通过管道传递给“ macOS”,“安全性”和“安装日期”,因此您只会得到第一行和带有日期的行。

然后将其通过tr(翻译)进行传递,并将所有换行符转换为空格。

然后您寻找AM和PM,并在其后添加换行符(在这种情况下,我似乎无法使用sed的'a'[append]命令,因此该命令中间有一个实际的换行符)

然后再次通过sed将其删除,以删除“安装日期:”

最后,您再次通过tr将其通过管道传递,以将多个空格变成单个空格,以使其更具可读性。

输出如下:

 macOS High Sierra 10.13.4 Update: 4/6/18, 12:03 PM
 Security Update 2018-001: 5/11/18, 2:59 PM
 Security Update 2018-001: 5/11/18, 3:04 PM
 macOS High Sierra 10.13.5 Update: 6/20/18, 10:32 AM

如果要更改日期格式,您将需要做更多的工作。但这至少可以帮助您入门。

答案 1 :(得分:0)

安全更新中有多少条附加行或信息(例如) 3和/或更少,请放置-C3选项

$ system_profiler SPInstallHistoryDataType | grep -EC3 "^\s*(Security|macOS)\b"
macOS 10.14.3 Update

        Source: Apple
        Install Date: 2/3/19, 3:11 PM