Сценарий 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 ? Важно отметить, что даты-штампы сами по себе не уникальны в этом командном выпуске.

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 
  • GREP / SED или AWK: печать всего абзаца в файле по совпадению с образцом
  • Заменить «-из» на «это» в начале строки
  • Есть ли способ сделать этот однострочный лайнер быстрее?
  • Как печатать строки, соответствующие шаблону с помощью grep?
  • Если поведение пустого условия
  • как избавиться от нежелательных линий? в то время как цикл?
  • Как передать журнал переменных в качестве аргумента скрипту?
  • Grep один вкладыш для удаления блоков случайного текста
  • Команда wc -w выводит неверный ответ
  • grep действует странно
  • захватить из текстового файла диапазон с использованием двух переменных в качестве начального и конечного параметров
  • Interesting Posts

    while: команда не найдена

    Передача сохраняет сброс разрешений файловой системы на FreeBSD

    как вычесть постоянное значение из файла данных?

    Рекомендации по управлению ключами SSH

    Установите Debian вместе с Ubuntu без доступа к настройкам BIOS или возможностью загрузки съемных носителей

    Как найти время, прошедшее в миллисекундах, между одной строкой вывода на следующую?

    если в переменной PATH существует 2 команды с одинаковым именем файла, которые будут выполнены?

    Есть ли способ запустить привилегированную команду после успешного входа в SSH (не обязательно с оболочкой или PTY)?

    Какие пакеты необходимы для установки vim на Fedora?

    Как использовать переменные bash внутри make

    Запустить терминал в режиме su XFCE

    Использование awk для поиска строки, содержащей символы

    Использование инструкции If в Crontab для создания оповещения

    Поиск файлов более 15 секунд, но старше 2 секунд

    Logstash: сообщение о нарушении связи не выполнено

    Linux и Unix - лучшая ОС в мире.