複数行と Grep を含む Bash スクリプト

複数行と Grep を含む Bash スクリプト

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?日付スタンプ自体がこのコマンド出力に固有ではないことは注目に値します。

ベストアンサー1

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

開始行と終了行の間のカウンターを一致させてインクリメントし、その数から最初の行と最後の行に含まれる数を引いた値を印刷します。 1 つ以上のファイルまたは標準入力を提供します。

おすすめ記事