sed
Linuxを使用して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_ID
、DBaction
とversion
は異なる場合があります。したがってtablename ="Data"
、version
isがあるたびに、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
持つ属性に属するノードを選択します。tableName
Data
そして部分文字列を含みます6.02
。これは文字列でのみ更新されます6.02
。
結果は標準出力に書き込まれ、ここから新しいファイルにリダイレクトしたり、xmlstarlet ed --inplace -u ...
文書を所定の場所で編集するために使用できます(注意して使用)。