OS X 终端:在输出中添加逗号

OS X Terminal: Add comma in output

我想知道如何在应用程序名称和应用程序版本的两行输出之间添加一个逗号。

这是我目前的代码和输出:

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

我想不出使用什么语法可以使当前命令尽可能简单,同时将“.app”替换为“.app,”。所以预期的输出看起来像(手动编辑):

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

我没有 VMware 可供测试,所以我将使用 iTunes

最简单的方法

基本上,我指定 mdls 的原始输出以去除所有无关的内容,然后使用 tr 将两个字段之间的 NUL 音译为逗号。这很简单,但之后不会给你 space,但可能已经足够好了。

mdls -name kMDItemFSName -name kMDItemVersion -raw /Applications/iTunes.app | tr '[=10=]' ','
iTunes.app,12.4.1

更难,更准确

tr 替换 NUL 是可以的,但是你不能同时得到逗号和 space 因为 tr 只做 "one-for-one" 替换。 sed 可以用一个逗号和一个 space 替换单个 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=} /kMDItemVersion/{print n, }' 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 时都会将第二个字段(即应用程序名称)保存为n。然后,每次看到 kMDItemVersion,它都会输出保存的名称和第二个字段(即版本)。 OFS(输出字段分隔符)设置为逗号和 space.