Как мне распечатать название программного обеспечения и дату установки из system_profiler в macOS?

#macos #awk #sed #grep

#macos #awk #sed #grep

Вопрос:

Я настраиваю текстовый файл / журнал, в котором будет храниться информация system_profiler SPInstallHistoryDataType , соответствующая «Обновлениям безопасности» и «Обновлениям macOS 10.x.x», а также датам установки, чтобы затем я мог отправить эту информацию в наше решение MDM.

При запуске system_profiler SPInstallHistoryDataType | grep "Security" я получаю только вывод

 Security Update 2017-001:
Security Update 2018-001:
Security Update 2018-001:
  

При запуске just system_profiler SPInstallHistoryDataType вы получите вывод, который выглядит следующим образом

Вывод 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
  

Буду признателен за любую помощь, спасибо!

Комментарии:

1. Показать выходные данные system_profiler SPInstallHistoryDataType , которые включают в себя то, что вы пытаетесь извлечь из него.

2. Я включил скриншот вывода — список слишком длинный, чтобы поместиться в окне терминала

3. Возможно, вам лучше запустить system_profiler -xml SPInstallHistoryDataType , а затем использовать perl, python или ruby для анализа выходных данных.

Ответ №1:

Вероятно, это можно немного оптимизировать, но вы можете использовать:

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

Чтобы немного прояснить это, вы вводите grep для ‘macOS’ и ‘Security’ и разрешаете возврат следующих 4 строк.

Затем вы передаете это через grep для ‘macOS’, ‘Security’ и ‘Дата установки’, так что вы получаете только первую строку и строку с датой.

Затем вы передаете его через tr (translate) и превращаете все новые строки в пробелы.

Затем вы ищете AM и PM и добавляете новую строку после (в этом случае я не смог использовать команду sed ‘a’ [добавить], поэтому в середине этой команды есть фактическая новая строка)

Затем вы снова передаете его через 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
  

Вам придется проделать больше работы, если вы хотите изменить формат даты. Но, по крайней мере, это может помочь вам начать.

Ответ №2:

Сколько дополнительных строк или информации из обновления безопасности, если это, например, 3 и / или меньше, опция put -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