XMLで1行の一部を見つけてその値を更新するには、Linuxでsedを使用する必要がありますか?

XMLで1行の一部を見つけてその値を更新するには、Linuxでsedを使用する必要がありますか?

sedLinuxを使用してXMLに部分一致がある場合は、XMLの変数値を固定値に更新する必要があります。

例:

入力値:

<Table tableName="Data" primaryKey="PGPU_ID=1234" DBaction="A" version="14.1,20.4,4.30,4.40,5.00,5.30,5.40,5.41,6.00,6.01,6.02,6.03,6.04">

要件は、バージョン値に「6.02」がある場合は常にバージョン値を6.02に更新することです。したがって、出力は次のようになります。

<Table tableName="Data" primaryKey="PGPU_ID=1234" DBaction="A" version="6.02">

注:tableName="Data"固定値ですがPGPU_IDDBactionversionは異なる場合があります。したがってtablename ="Data"versionisがあるたびに、6.02コマンドsedはバージョンを6.02にのみ変更し、他の値はまったく同じにする必要があります。

ベストアンサー1

使用xmlstarlet:

xmlstarlet ed -u '//Table/@version[ ../@tableName = "Data" and contains(.,"6.02") ]' -v '6.02' file.xml

versionこれにより、各ノードのすべての属性を見つけることができますTable。その値をTable持つ属性に属するノードを選択します。tableNameData そして部分文字列を含みます6.02。これは文字列でのみ更新されます6.02

結果は標準出力に書き込まれ、ここから新しいファイルにリダイレクトしたり、xmlstarlet ed --inplace -u ...文書を所定の場所で編集するために使用できます(注意して使用)。

おすすめ記事