Обычно лучше использовать инструмент, который понимает XML для анализа файла XML, вместо того, чтобы пытаться анализировать его с помощью таких вещей, как sed
или awk
. Например, команда xmllint
имеет параметр --xpath
, который можно использовать для извлечения информации из файла XML:
$ ID=V702
$ result=$(xmllint --xpath "//data[@id='$ID']" data.xml)
$ echo "$result"
<data id="V702">
<string name="MSG_V702_ID">V702</string>
<string name="MSG_V702_TITLE">Play</string>
<string name="MSG_V702_BODY">This title is currently unable to play</string>
</data>
Или даже:
$ result=$(xmllint --xpath "//data[@id='$ID']//text()" data.xml)
$ echo "$result"
V702
Play
This title is currently unable to play
Если вы хотите отдельные строки, вы можете сделать что-то вроде этого:
title=$(xmllint --xpath "//data[@id='$ID']/string[@name='MSG_${ID}_TITLE']/text()" data.xml)
body=$(xmllint --xpath "//data[@id='$ID']/string[@name='MSG_${ID}_BODY']/text()" data.xml)