次の Parse_xml 関数があります。
Parse_XML()
{
TDIR=$1
_VERSION=
_REVISION=
_FILENAME=
_COMPONENT=
_DESCRIPT=
_ISITOA=0
_NOLOG=0
_OAVERSION=
local TMP=/tmp/tmpfile.txt-$$
local JUNK
# find the cpq_package XML file and assign it to file
local file=
for xmlfile in *.xml
do
if [ -n "$(head ${xmlfile} | grep '<cpq_package')" ] ; then
file="${xmlfile}"
break
fi
done
if [ -z "${file}" ] || [ ! -f "${file}" ]
then
_NOLOG=1
return
fi
${echo} `grep \<version $file|awk -F = '{print $2}'|awk '{print $1}'|tr -d '"'` > $TMP
read _VERSION JUNK < $TMP
${echo} `grep \<version $file|awk -F '=' '{print $3}'|awk '{print $1}'|tr -d '"'` > $TMP
read _REVISION JUNK < $TMP
_OAVERSION=${_VERSION}
_VERSION=${_VERSION}${_REVISION}
その行のxmlファイルから取得したバージョンとリビジョンは次のとおりです。
<version value="GPK5" revision="B" type_of_change="1"/>
<version value="GPK5" revision="" type_of_change="1"/>
ここでは、一部のリビジョンは空の文字列であり、一部のリビジョンには1つの文字があるため、コマンドは
grep \<version CP057761.xml|awk -F = '{print $2}'|awk '{print $1}'|tr -d '"'
xmlからすべてのバージョンをインポートし、TMPファイルに保存します。注文して
grep \<version CP057761.xml|awk -F '=' '{print $3}'|awk '{print $1}'|tr -d '"'
さまざまなバージョンのXMLからすべてのバージョンヘッダーのリビジョンを取得します。
したがって、時には古いバージョンのリビジョンをインポートして空のリビジョンがあるバージョンに追加することがあります。
このコマンドをどのように変更できますか?
${echo} `grep \<version $file|awk -F = '{print $2}'|awk '{print $1}'|tr -d '"'` > $TMP
read _VERSION JUNK < $TMP
${echo} `grep \<version $file|awk -F '=' '{print $3}'|awk '{print $1}'|tr -d '"'` > $TMP
read _REVISION JUNK < $TMP
_OAVERSION=${_VERSION}
_VERSION=${_VERSION}${_REVISION}
xmlファイルの_VERSION変数値のみを検索して特定のバージョンを取得します。したがって、リビジョンがある場合は_VERSIONはGPK5Bを印刷し、空の場合は_VERSIONはGPK5を印刷します。
\<versionの代わりに$_VERSIONリビジョンを見つけて、この問題を解決しました。特定のバージョンのリビジョンだけが得られ、_REVISION JUNK $ TMPを読むとリビジョンが出てきたので、基本的に最新のリビジョンとバージョンだけが欲しいです。申し訳ありません。以前の質問は明確ではありませんでした。
ベストアンサー1
XMLパーサーを使用してXMLデータを解析します。xmlstarlet一つです。
与えられたfile.xml
内容は次のとおりです
<root>
<version value="GPK5" revision="B" type_of_change="1"/>
<version value="GPK5" revision="" type_of_change="1"/>
</root>
それから
xmlstarlet sel -t -m '//version' -v '@value' -v '@revision' -n file.xml
出力
GPK5B
GPK5