Сценарий Bash с несколькими строками и Grep

У меня есть выход из определенной команды, которая может предоставить количество раз, когда приложение было помечено как «использовано» в системе OS X. Команда – mdls .

Результат выглядит аналогично следующему (усеченному)

 ... kMDItemLastUsedDate = 2016-03-15 18:45:00 +0000 kMDItemLogicalSize = 47225668 kMDItemPhysicalSize = 57065472 kMDItemUseCount = 90 kMDItemUsedDates = ( "2016-02-02 06:00:00 +0000", "2016-02-03 06:00:00 +0000", "2016-02-04 06:00:00 +0000", "2016-02-05 06:00:00 +0000", "2016-02-09 06:00:00 +0000", "2016-02-10 06:00:00 +0000", "2016-02-11 06:00:00 +0000", "2016-02-12 06:00:00 +0000", "2016-02-13 06:00:00 +0000", "2016-02-14 06:00:00 +0000", "2016-02-15 06:00:00 +0000", "2016-02-16 06:00:00 +0000", "2016-02-17 06:00:00 +0000", "2016-02-18 06:00:00 +0000", "2016-02-19 06:00:00 +0000", "2016-02-20 06:00:00 +0000", "2016-02-21 06:00:00 +0000", "2016-02-22 06:00:00 +0000", "2016-02-23 06:00:00 +0000", "2016-02-24 06:00:00 +0000", "2016-02-25 06:00:00 +0000", "2016-02-26 06:00:00 +0000", "2016-02-27 06:00:00 +0000", "2016-03-02 06:00:00 +0000", "2016-03-05 06:00:00 +0000", "2016-03-07 06:00:00 +0000", "2016-03-09 06:00:00 +0000", "2016-03-10 06:00:00 +0000", "2016-03-11 06:00:00 +0000", "2016-03-12 06:00:00 +0000", "2016-03-13 06:00:00 +0000", "2016-03-15 05:00:00 +0000" ) kMDItemVersion = "9.0.3" ... 

Из этого списка я действительно хочу только просмотреть конкретные записи, связанные с kMDItemUsedDates . Я не знаю, сколько строк может содержать эта запись в любой системе, она может быть 1 или может быть 32.

Как обработать этот вывод, чтобы иметь возможность получать ТОЛЬКО счет количества записей даты, относящихся к массиву kMDItemUsedDates ? Важно отметить, что даты-штампы сами по себе не уникальны в этом командном выпуске.

  • `set -e` и` grep` idiom для предотвращения преждевременного выхода из сценария оболочки, когда шаблон не найден
  • Распечатайте все строки, которые не содержат знаков препинания
  • код выхода grep в ловушке, где скрипт запускается при помощи функции upstart
  • Узнать, сколько программ я не установил из списка с помощью grep / awk в archlinux
  • Как я рекурсивно grep через сжатые архивы?
  • Подавить предупреждение версий rbenv, если рубины не установлены
  • Перенаправить вывод ошибки grep в файл
  • grep заботится о расширении .dat?
  • 2 Solutions collect form web for “Сценарий Bash с несколькими строками и Grep”

     perl -nE '$c++ if m/^kMDItemUsedDates\s+=\s+\(/..m/^\)/; END { say $c - 2 }' 

    Сопоставьте и увеличьте счетчик между стартовой и конечной строками, затем распечатайте этот счет, минус включенный счетчик для первой и последней строк. Подайте файл, файлы или стандартный ввод.

    Следующее может подсчитать выбранные строки, если вывод будет пропущен через:

     sed -n '/kMDItemUsedDates\s*= (/{:1;n;/)/!{p;b1;};}' | wc -l 

    вариант 2:

     sed '/kMDItemUsedDates\s*= (/,/)/!d;/[()]/d' | wc -l 
    Linux и Unix - лучшая ОС в мире.