1

我想从 ios mobileprovision 文件中提取一些东西,其中之一是文件中存储的配置文件的名称,通常在文件中是这样的:

<key>Name</key>
<string>My Profile Name</string>

或者

<key>Name</key>
<string>iOS Team Provisioning Profile: *</string>

这些名称来自配置文件的名称,如 iOS 开发人员门户的 Provisioning 部分所示。

我以为我可以做这样的事情

#!/bin/bash
mypath='/Users/username/Library/MobileDevice/Provisioning Profiles/'
cd "$mypath"
for file in *.mobileprovision
do

get_the_profile_name=$(grep -i '<key>name</key>' -A1 -a "$mypath$file" | grep -v "Name" | cut -f2 -d\> | cut -f1 -d\<)

done

这会将变量 get_the_profile_name 设置为命令的结果。它适用于该项目的第一个示例,但是,第二个示例导致变量包含目录中文件的文件名。我猜这是由于星号或冒号。

有什么方法可以实现我想要的,如果有,欢迎提出建议

4

2 回答 2

1

我猜这是由于星号或冒号。

不,这是因为您没有正确引用。

echo "$get_the_profile_name"

此外,XMLStarlet

于 2012-12-06T03:05:05.933 回答
0

对我来说,第一个示例不起作用,因为您使用的是grep -v. 您可以使用更少的管道更安全地执行您想要的操作,GNU sed如下所示:

get_the_profile_name=$(sed -n '/<key>name<\/key>/I { n; s/[^>]*>\(.*\)<[^<]*/\1/p }' "$mypath$file")

echo "$get_the_profile_name"
于 2012-12-06T03:32:54.400 回答