从字符串包含星号的文件中设置bash变量

时间:2012-12-06 02:57:48

标签: bash grep cut

我想从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设置为命令的结果。它在项目的第一个示例中工作正常,但是,第二个示例使变量包含目录中文件的文件名。我猜这是由于星号或冒号。

有没有办法实现我想要的东西,如果有,建议欢迎

2 个答案:

答案 0 :(得分:1)

  

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

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

echo "$get_the_profile_name"

另外,XMLStarlet

答案 1 :(得分: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"