首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OS终端:在输出中添加逗号

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

Stack Overflow用户
提问于 2016-07-02 06:18:59
回答 1查看 252关注 0票数 1

我试图弄清楚如何在应用程序名和应用程序版本的两行输出之间添加逗号。

下面是我现在的代码和输出:

代码语言:javascript
复制
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,”。因此,预期的输出将类似于(手工编辑):

代码语言:javascript
复制
VMware Fusion.app, 8.1.1
VMware Horizon Client.app, 4.0.1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-02 11:18:21

我不需要用VMware进行测试,所以我将使用iTunes

最简单方法

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

代码语言:javascript
复制
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

代码语言:javascript
复制
mdls -name kMDItemFSName -name kMDItemVersion -raw /Applications/Textedit.app | perl -pe 's/\x0/, /'
TextEdit.app, 1.11

通配符版本

或者,如果您想使用通配符,我将使用awk

代码语言:javascript
复制
mdls -name kMDItemFSName -name kMDItemVersion /Applications/*.app | awk -F'"' '/kMDItemFSName/{n=$2} /kMDItemVersion/{print n, $2}' OFS=', '

输出

代码语言:javascript
复制
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 (输出字段分隔符)被设置为逗号和空格。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38157147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档