#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