Bashシェルスクリプトを介してXMLファイルを操作する必要がある作業があります。
次のように進んでください。
- XMLファイルの値を照会します。
- 他の要素の値を新しい値に置き換えます。
以下はサンプルXMLです。
<context-param>
<param-name>com.sun.faces.sendPoweredByHeader</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.numberOfViewsInSession</param-name>
<param-value>25</param-value>
</context-param>
<context-param>
<param-name>testing</param-name>
<param-value>25</param-value>
</context-param>
parm値を更新するには、シェルスクリプトを使用する必要があります<param-value>25</param-value>
。<param-value>3</param-value>
パラメータname()のパラメータ値のみを更新するSEDコマンドは何ですか<param-name>com.sun.faces.numberOfViewsInSession</param-name>
?
次のコマンドを試してみました。
sed -i 's/<param-value>25<\/param-value>/<param-value>3<\/param-value>/' test.xml
ただし、このコマンドはすべてのパラメーター値を更新します。 com.sun.faces.numberOfViewsInSessionを更新するだけです。
答え1
XMLStarletを使用し、ドキュメントにルートノードがあるとします。
xmlstarlet ed \
-u '//context-param[param-name = "com.sun.faces.numberOfViewsInSession"]/param-value[. = 25]' \
-v 3 file.xml
これにより、正しいparam-value
ノード(値が25のノード([. = 25]
以前の値が重要でない場合はビットを削除)と子値が25のノードの子context-param
)が選択され、その値が3に変更されます。param-name
com.sun.faces.numberOfViewsInSession
生成された文書は次のとおりです(root
偽ノードの挿入)。
<?xml version="1.0"?>
<root>
<context-param>
<param-name>com.sun.faces.sendPoweredByHeader</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.numberOfViewsInSession</param-name>
<param-value>3</param-value>
</context-param>
<context-param>
<param-name>testing</param-name>
<param-value>25</param-value>
</context-param>
</root>
答え2
sed -i 's#<param-value>25</param-value>#<param-value>3</param-value>#' test.xml
答え3
次のsedコマンドを使用すると、特定のタグ値を更新できます。
sed -i '/<param-name>com.sun.faces.numberOfViewsInSession<\/param-name>/{n;s/<param-value>3<\/param-value>/<param-value>25<\/param-value>/}' test.xml