2013-09-30 6 views
0

Я хотел бы, чтобы извлечь APP_NAME значение, содержащееся в string.xml, но я не знаю, как это сделать:Android получить имя проекта Баш

Вот что у меня есть

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

это печатает @ строка/app_name

но то, что я хотел бы это фактическая строка, содержащаяся там, как я мог бы сделать это в Баш скрипт, пожалуйста: что-то вроде

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

также, если кто-нибудь знает о простых и быстрых учебники для AWK Я был бы благодарен

благодаря

EDIT: 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> 

Thks всем, что ответили вот окончательная версия:

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 
+1

Используйте xpath для извлечения значения. вы можете показать входные данные xmls? – hek2mgl

+0

Не могли бы вы объяснить, пожалуйста, какой пример? также hav отредактировал мой вопрос и добавил xml-файл – vallllll

+0

да, приведу пример – hek2mgl

ответ

2

Вы можете использовать XPATH:

xpath -q -e "//*[@name='app_name']/text()" AndroidManifest.xml 
+0

Не стандартная программа в Ubuntu и должна быть установлена , Зачем использовать его, когда простой 'awk' получает то, что нам нужно? – Jotne

0

Этот awk с разным разделителем файлов будет работать:

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

ВЫВОД:

app_name 
+0

спасибо, но я хотел бы получить то, что находится внутри «app_name», а не само имя приложения – vallllll

+0

Я представил пример xml в редакторе, поэтому то, что я хотел бы распечатать, - это имя приложения – vallllll

0

Пример с использованием XPath:

test.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, установленный для этого

1

Вот решение (не очень портативное) с awk:

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

С вашим примером, выход App Name ,

Краткое описание: он изменяет разделитель полей ввода с помощью угловых скобок, тогда команда awk занимает 3-е поле, если строка соответствует "app_name".

Смежные вопросы