2016-07-02 3 views
1

응용 프로그램 이름과 응용 프로그램 버전의 두 줄 출력 사이에 쉼표를 추가하는 방법을 알아 내려고하고 있습니다. ".APP"OS X 터미널 : 출력에 쉼표를 추가하십시오.

ordepmod-mbp:~ ordepmod$ mdls -name kMDItemFSName /Applications/*VMware*.app -name kMDItemVersion | sed 's/[^"]*"\([^"]*\)".*/\1/' | xargs -L 2 
VMware Fusion.app 8.1.1 
VMware Horizon Client.app 4.0.1 

내가 함께 ".APP"를 교체하는 동안, 가능한 한 간단하게 본 명령을 유지할 것이라고를 사용하는 구문을 알아낼 수 없습니다 : 여기

내 현재 코드 및 출력 . 그래서 의도 된 출력은 (수동으로 편집)과 같습니다

VMware Fusion.app, 8.1.1 
VMware Horizon Client.app, 4.0.1 

답변

1

나는 VM웨어와 함께 테스트하지 않아도, 그래서 내가 대신 iTunes를 사용합니다.

간단한 방법

기본적으로, 다음 쉼표로 두 필드 사이의 NUL를 음역 tr를 사용하여 모든 외부 물건을 없애 mdls에서 원시 출력을 지정하고있다. 이것은 간단하지만 나중에 공간을 제공하지는 않지만 충분할 수 있습니다.

mdls -name kMDItemFSName -name kMDItemVersion -raw /Applications/iTunes.app | tr '\0' ',' 
iTunes.app,12.4.1 

약간 세게, 더 정확한

tr으로 NUL을 교체하는 것은 괜찮습니다,하지만 당신은 쉼표와 tr"일대일" 교체 않기 때문에 공간을 모두 얻을 수 없다 . sed은 단일 NUL을 쉼표와 공백으로 바꿀 수 있지만 OSX에서는 sed이 아닌 GNU 버전에서는 그리 쉽지 않으므로 대신 perl을 사용합니다.

mdls -name kMDItemFSName -name kMDItemVersion -raw /Applications/Textedit.app | perl -pe 's/\x0/, /' 
TextEdit.app, 1.11 

와일드 카드 버전

또는 와일드 카드를 사용하려는 경우, 내가 awk

mdls -name kMDItemFSName -name kMDItemVersion /Applications/*.app | awk -F'"' '/kMDItemFSName/{n=$2} /kMDItemVersion/{print n, $2}' OFS=', ' 

출력

App Store.app, 2.1 
Automator.app, 2.6 
Calculator.app, 10.8 
Calendar.app, 8.0 
Carbon Copy Cloner.app, 4.1.9 
Chess.app, 3.13 
Contacts.app, 9.0 
... 
Sonos.app, 6.2.2 
Stickies.app, 10.0 
System Preferences.app, 14.0 
TextEdit.app, 1.11 
TextWrangler.app, 5.0.2 
Time Machine.app, 1.3 
VirtualBox.app, 5.0.24 
Xcode.app, 7.3 
iBooks.app, 1.5 
iMovie.app, 10.1.2 
iTunes.app, 12.4.1 

으로 갈 것 awk 명령은 기본적으로 입력 필드 구분 기호를 "으로 설정 한 다음 kMDItemFSName을 볼 때마다 두 번째 필드 (앱 이름)를 으로 저장합니다. 그런 다음 kMDItemVersion이 나타날 때마다 저장된 이름과 두 번째 필드 (버전)를 출력합니다. OFS (출력 필드 분리 기호)는 쉼표와 공백으로 설정됩니다.

+0

awk를 사용하는 와일드 카드 버전은 의도 한 용도에 필요한 응용 프로그램, 쉼표, 공백 및 줄 바꿈을 제공합니다. 다른 두 옵션은 "AppName, AppVersion"의 출력을 제공 한 후에 줄 바꿈을하지 않습니다. – ordepmod

관련 문제