シェルコマンド - xmlファイルから文字列を抽出する

シェルコマンド - xmlファイルから文字列を抽出する

次の 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データを解析します。一つです。

与えられた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

おすすめ記事