我想从ios mobileprovision文件中提取一些东西,其中之一是存储在文件中的配置文件的名称,通常在文件中是这样的:
<key>Name</key>
<string>My Profile Name</string>
或
<key>Name</key>
<string>iOS Team Provisioning Profile: *</string>
这些名称来自配置文件的名称,如 iOS 开发人员门户的"预配"部分所示。
我想我也许能做这样的事情
#!/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设置为命令的结果。它在项目的第一个示例上工作正常,但是,第二个示例会导致变量包含目录中文件的文件名。我认为这是由于星号或冒号。
有什么方法可以实现我想要的,如果是,欢迎提出建议
我认为这是由于星号或冒号。
不,这是由于您没有正确引用。
echo "$get_the_profile_name"
此外,XMLStarlet。
,第一个示例不起作用,因为您使用的是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"