1

名前と値のペアのセットと XML ファイルを入力として受け取るシェル スクリプトを作成しようとしています。

その目的は、XML ファイル内で名前/値のペア ファイル (タグで区切られた) から「名前」文字列を検索し、XML ファイルの同じレベルで定義された「値」文字列 (タグで区切られた) を置き換えることです。

例えば

名前と値のペア ファイル

trousers=blue
hat=red
shoes=brown

入力 XML ファイル

<application>
    <Pairs>
        <Pair>
            <name>trousers</name>
            <value>black</value>
        </Pair>
        <IrritatingExtraLayer>
            <Pair>
                <name>hat</name>
                <value>green</value>
            </Pair>
        </IrritatingExtraLayer>
        <Pair>
            <name>shirt</name>
            <value>orange</value>
        </Pair>
    </Pairs>
</application>

期待される出力ファイル

<application>
    <Pairs>
        <Pair>
            <name>trousers</name>
            <value>blue</value>
        </Pair>
        <IrritatingExtraLayer>
            <Pair>
                <name>hat</name>
                <value>red</value>
            </Pair>
        </IrritatingExtraLayer>
        <Pair>
            <name>shirt</name>
            <value>orange</value>
        </Pair>
    </Pairs>
</application>

xmlstarlet を使用してこれを実行できるスクリプトを既に作成しましたが、非常に遅いです (私が作業しているファイルは数千行の長さです)。私のスクリプトの主なコード スニペット (前処理と後処理を無視) は次のとおりです。

for line in ${namevaluepairs}; do
                name=$(echo ${line} | cut -d'=' -f1)
                value=$(echo ${line} | cut -d'=' -f2)

                outputxml=$(echo ${outputxml} | xmlstarlet ed -u "//Pair/[name='${name}']/value" -v "${value}" )
done

これを改善するにはどうすればよいですか?

4

1 に答える 1