如何通过grep和regex捕获应用程序版本到控制台?

ahy6op9u  于 2023-08-08  发布在  其他
关注(0)|答案(4)|浏览(82)

我的正则表达式很弱。我很惭愧,但这是真的。
我可以通过如下命令将包含Mac应用程序(Xcode)版本的整行记录到控制台:

defaults read /Applications/Xcode.app/Contents/Info.plist | grep 'CFBundleShortVersionString = "'

字符串
它显示如下所示的行:

CFBundleShortVersionString = "14.2";


我如何在grep命令中添加正则表达式来捕获“14.2”位?我知道我需要使用类似`([0-9]+.[0.9]+)(捕获1个或多个数字,一个句点和一个或多个数字)的东西,但无法使其工作。

sshcrbum

sshcrbum1#

把那条线

.... | grep -o -E '[0-9]+[.][0-9]+'

字符串

b4lqfgs4

b4lqfgs42#

defaults命令will accept一个键,并将返回该键的值,因此这应该报告您要查找的值:

defaults read /Applications/Xcode.app/Contents/Info.plist CFBundleShortVersionString

字符串
在一些快速测试中,当指定plist文件而不是com.apple.something域时,defaults命令似乎需要绝对路径(以/开头)。
此外,手册页还有以下注解:
警告:默认命令将在即将发布的主要版本中更改为仅在首选项域上操作。通用plist操作实用程序将被合并到不同的命令行程序中。
据报道,这张纸币至少从2017年就存在了,所以这种情况可能不会很快发生。

lg40wkob

lg40wkob3#

您可以使用

defaults read /Applications/Xcode.app/Contents/Info.plist | \
    sed -n 's/.*CFBundleShortVersionString = "\([^"]*\).*/\1/p'

字符串
参见online demo

  • 详细信息 *:
  • n-抑制默认行输出
  • .*CFBundleShortVersionString = "\([^"]*\).*-匹配包含CFBundleShortVersionString = "的整行,然后将"以外的所有零个或多个字符捕获到组1中
  • \1-用组1值替换整行
  • p-仅输出成功替换的结果。
bt1cpqcv

bt1cpqcv4#

(\d+\.)?(\d+\.)?(\*|\d+)\";$

字符串
它将匹配1.21.2.4

相关问题