我试图弄清楚如何在应用程序名和应用程序版本的两行输出之间添加逗号。
下面是我现在的代码和输出:
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“替换为".app,”。因此,预期的输出将类似于(手工编辑):
VMware Fusion.app, 8.1.1
VMware Horizon Client.app, 4.0.1发布于 2016-07-02 11:18:21
我不需要用VMware进行测试,所以我将使用iTunes。
最简单方法
基本上,我是指定来自mdls的原始输出,以消除所有无关的内容,然后使用tr将两个字段之间的NUL音译为逗号。这很简单,但没有给你空间,但可能足够好。
mdls -name kMDItemFSName -name kMDItemVersion -raw /Applications/iTunes.app | tr '\0' ','
iTunes.app,12.4.1稍硬一点,更精确
用tr替换NULs是可以的,但是不能同时得到逗号和空格,因为tr只做“一对一”的替换。sed可以用逗号和空格替换单个NUL,但是在OSX上使用非GNU版本的sed并不容易,所以我选择使用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.1awk命令基本上是将输入字段分隔符设置为",然后每次看到kMDItemFSName时,它都将第二个字段(即应用程序名称)保存为n。然后,每次看到kMDItemVersion时,它都会输出保存的名称和第二个字段(即版本)。OFS (输出字段分隔符)被设置为逗号和空格。
https://stackoverflow.com/questions/38157147
复制相似问题