以下に示す文字列には、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"