0

我想提取 string.xml 中包含的值 app_name 但我不知道该怎么做:

这是我所拥有的

appName=`awk -F'"' '/android:label/{print $(NF-1); exit}' AndroidManifest.xml`
echo "App name is "$appName

这打印@string/app_name

但我想要的是其中包含的实际字符串,我怎么能在 bash 脚本中做到这一点:比如

#totally wrong
appName2=`awk -F'"' '$appName{print $(NF-1); exit}' res/values/strings.xml`
echo "App name is "$appName2 #this prints "utf-8"

另外,如果有人知道 awk 的简单快速教程,我将不胜感激

谢谢

编辑:xml文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="other">Other</string>
  <string name="app_name">App Name</string>
  <string name="other2">Other</string>
</resources>

感谢所有在这里回答的人是最终版本:

appName=`awk -F'["/]' '/android:label/{print $(NF-1); exit}' AndroidManifest.xml`
echo "App name is "$appName

appName2=`xpath -q -e "//*[@name='$appName']/text()" res/values/strings.xml`
echo $appName2
4

4 回答 4

2

您可以使用 xpath:

xpath -q -e "//*[@name='app_name']/text()" AndroidManifest.xml
于 2013-09-30T11:58:23.483 回答
1

这是一个解决方案(不是很便携)awk

awk -F'[<>]' '/"app_name"/ {print $3}'

以您的示例为例,输出为App Name.

简短说明:它使用尖括号更改输入字段分隔符,然后如果行匹配,则 awk 命令采用第三个字段"app_name"

于 2013-09-30T12:08:58.687 回答
0

这个具有不同文件分隔符的 awk 将起作用:

awk -F'["/]' '/android:label/{print $(NF-1); exit}' AndroidManifest.xml

输出:

app_name
于 2013-09-30T11:18:11.690 回答
0

使用 xpath 的示例:

测试.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="other">Other</string>
  <string name="app_name">App Name</string>
  <string name="other2">Other</string>
</resources>

命令:

xmllint --xpath '//*[@name="app_name"]/text()' test.xml

你需要为此安装 xmllint 包

于 2013-09-30T12:01:45.310 回答