AWKを使用したXMLの解析

AWKを使用したXMLの解析

以下に示す文字列には、ANSI形式の日付(YYYY-MM-DD)の最初のインスタンスのみが必要です。

PosMntReq ReqId="XXXXX" TxnTyp="4" Actn="1" BizDt="2019-03-27" TxnTm="2019-03-27T10:41:13" AdjTyp="3" SetSesID="EOD">

awk を使用して作成したコマンドに日付は指定されません。

v_business_date=$(awk -F= 'NR==4 { print $5}' XMLCD02)

bash-4.2$ echo $v_business_date
"2019-03-27" TxnTm

日付のある行がファイルに複数回表示されます。その行の最初の項目が必要です。

答え1

データについていくつかの仮定をしましょう。

$ cat file.xml
<root>
  <node1>
    <node2 ReqId="XXXXX" TxnTyp="4" Actn="1" BizDt="2019-03-27" TxnTm="2019-03-27T10:41:13" AdjTyp="3" SetSesID="EOD"> 
    </node2>
  </node1>
</root>

$ txn_tm=$( xmlstarlet sel -t -v '//node2/@TxnTm' file.xml )

$ echo "$txn_tm"
2019-03-27T10:41:13

ReqIdに基づいてノードを選択するには、xpathを調整する必要があります。指定された「ReqId」属性を持つすべてのノードの「TxnTm」属性値を返します。

xmlstarlet sel -t -v '//*[@ReqId = "XXXXX"]/@TxnTm' -n file.xml

答え2

XMLを解析するために正規表現を使用しないでください。それは狂気です。しかし、あなたが狂気とポニーの中に入っていきたい場合は、

sed -En '/TxnTm=/{s/^.*TxnTm="//;s/T[0-9:]+".*$//;p;q;}' < inputfile

答え3

より簡単なオプションは単に使用することですgrep。しかし、XMLやXHTMLを解析するために正規表現ツールを使用するという提案は、悲しみの都市に行く片道チケットです。

$ grep -m1 -oE '"[0-9]{4}-[0-9]{2}-[0-9]{2}"' input
"2019-03-27"

関連情報