2016-07-02 8 views
1

Ich versuche herauszufinden, wie ein Komma zwischen zwei Zeilenausgaben des Anwendungsnamens und der Anwendungsversion hinzugefügt werden kann.OS X Terminal: Komma in der Ausgabe hinzufügen

Hier ist mein gegenwärtiges Code und Ausgang:

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 

Ich kann nicht die Syntax herauszufinden, dass verwenden würde den vorliegenden Befehl so einfach wie möglich zu halten, während „.app‚mit dem Ersetzen‘.app“ . So ist die beabsichtigte Ausgabe aussehen würde (manuell bearbeitet):

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

Antwort

1

Ich habe keine VMware mit zu testen, so werde ich iTunes stattdessen verwenden.

einfachste Methode

Grundsätzlich bin ich Rohausgangssignal von mdls spezifiziert dann, um loszuwerden, alle die fremden Sachen, tr mit der NUL zwischen den beiden Feldern in ein Komma transkribieren. Das ist einfach, gibt dir aber nicht den Platz danach, aber vielleicht ist es gut genug.

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

etwas härter und genauer

NULs Austausch mit tr ist in Ordnung, aber Sie können nicht sowohl das Komma und den Raum zu bekommen, weil tr nur, dass "one-for-one" Ersatz . sed kann die einzelne NUL durch ein Komma und ein Leerzeichen ersetzen, aber es ist nicht sehr einfach mit der Nicht-GNU-Version von sed auf OSX, also würde ich stattdessen mit gehen.

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

Wildcard Version

Oder, wenn Sie Platzhalter verwenden möchten, würde ich gehen mit awk

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

Ausgabe

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 

Die awk Befehl setzt im Grunde das Eingabefeld Trennzeichen auf ", und jedes Mal, wenn es kMDItemFSName sieht, speichert es das zweite Feld (das ist der Name der App) als n. Jedes Mal, wenn es kMDItemVersion sieht, gibt es den gespeicherten Namen und das zweite Feld (die Version) aus. Das OFS (Ausgabefeldtrennzeichen) ist auf ein Komma und ein Leerzeichen gesetzt.

+0

Die Wildcard-Version mit awk stellt die Anwendung (en), Komma (s), Leerzeichen und Zeilenumbrüche für meine vorgesehenen Zwecke benötigt. Die anderen beiden Optionen haben keine Zeilenumbrüche, nachdem die Ausgabe von "AppName, AppVersion" bereitgestellt wurde. – ordepmod

Verwandte Themen