我有一个特定命令的输出,该命令可以提供应用程序在 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 }'
匹配并递增起始行和结束行之间的计数器,然后打印该计数,减去第一行和最后一行包含的计数。向其提供一个或多个文件或标准输入。
答案2
如果输出将通过管道传输,则以下内容可以对所选行进行计数:
sed -n '/kMDItemUsedDates\s*= (/{:1;n;/)/!{p;b1;};}' | wc -l
变体2:
sed '/kMDItemUsedDates\s*= (/,/)/!d;/[()]/d' | wc -l