Script Bash com várias linhas e grep

0

Eu tenho saída de um comando específico que pode fornecer o número de vezes que um aplicativo foi marcado como 'usado' em um sistema OS X. O comando é mdls .

A saída é semelhante à seguinte (truncada)

...
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"
...

Desta lista de coisas, eu realmente quero ver apenas as entradas específicas relacionadas a kMDItemUsedDates . Eu não sei quantas linhas essa entrada pode ter em qualquer sistema, pode ser 1 ou 32.

Como eu processaria essa saída para poder recuperar SOMENTE uma contagem do número de entradas de registro de data relativas à matriz kMDItemUsedDates ? É importante observar que os carimbos de data não são exclusivos nesta saída de comando.

    
por Andrew 16.03.2016 / 17:58

2 respostas

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

Combine e incremente um contador entre as linhas inicial e final e imprima essa contagem, menos a contagem incluída para a primeira e a última linhas. Alimente-o com um arquivo, arquivos ou entrada padrão.

    
por 16.03.2016 / 18:06
1

O acompanhamento pode contar linhas com opções se a saída for canalizada:

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

variante 2:

sed '/kMDItemUsedDates\s*= (/,/)/!d;/[()]/d' | wc -l
    
por 16.03.2016 / 19:34