"EXXARS - 実際の在庫調整レポート US PDF_es_ES.xlf" ファイルがあります。
ファイルデータ:
<header>
<prop-group name="ora_reconstruction">
<prop prop-type="TemplateCode">XXPO_PHYS_INV_ADJ_ES_AS</prop>
<prop prop-type="extractorVersion">10.1.3.4.2_1.5</prop>
</prop-group>
抽出と結果の間の値が必要です。 XXPO_PHYS_INV_ADJ_ES_ES変数にはこの値が必要です。
コマンドは機能しません。
filename='ES - Physical Inventory Adjustment Report US PDF_es_ES.xlf'
sed -n 's:.*<prop prop-type="TemplateCode">\(.*\)</prop>.*:\1:p' filename > ${LOBCODE}
echo " --> ${LOBCODE}"
ベストアンサー1
XMLファイルの形式が正しいと仮定します。
<?xml version="1.0"?>
<header>
<prop-group name="ora_reconstruction">
<prop prop-type="TemplateCode">XXPO_PHYS_INV_ADJ_ES_AS</prop>
<prop prop-type="extractorVersion">10.1.3.4.2_1.5</prop>
</prop-group>
</header>
使用XMLスター:
xmlfile='ES - Physical Inventory Adjustment Report US PDF_es_ES.xlf'
LOBCODE=$( xml sel -t -v '//prop[@prop-type="TemplateCode"]' "$xmlfile" )
これはXMLStarletを使用して、prop
属性が次のノードの値を抽出します。この変数は上記のXMLを介して値を取得します。prop-type
TemplateCode
LOBCODE
XXPO_PHYS_INV_ADJ_ES_AS
xmlstarlet
XMLStarletは時々asの代わりにasとしてインストールされるかもしれませんxml
。
コードには2つの問題があります。
コマンド出力を
sed
というファイルにリダイレクトします$LOBCODE
。空の場合、$LOBCODE
このリダイレクトは失敗します。私はあなたが望むものの出力をsed
変数に割り当てると仮定しますLOBCODE
。これは、上記のようにコマンドの置き換えによって行われます。これはsed
XMLデータを解析するのに適していない選択です。sed
というファイルを使用して、次のタスクを実行するように指示しますfilename
。sed
変数値filename
$
変数名の前に使用する必要があります。また、ファイル名にスペースがあるため、二重引用符変数の拡張が必要です(いつもとにかくそうしなさい)。したがって、使用する必要があります"$filename"
(上記のコードでは、より説明的な変数名を使用しました)。