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