使用shell脚本更新web.xml以更改param-value

时间:2013-11-21 20:17:33

标签: xml bash shell sed awk

我在web.xml中有以下条目

<context-param>
  <param-name>oracle.adf.view.rich.automation.ENABLED</param-name>
  <param-value>false</param-value>
</context-param>

我正在使用shell脚本进行一些重新打包工作,并希望仅为给定的param-name将值从“false”更改为“true”。我怎么能用sed / awk命令呢?请注意,有多个param-name和param-value条目带有'false'值,这些值不应随之改变。

3 个答案:

答案 0 :(得分:1)

awk -v tgt='oracle.adf.view.rich.automation.ENABLED' '
    found { sub(/false/,"true"); found=0 }
    { found = index($0,"<param-name>" tgt "</param-name>" }
' file

答案 1 :(得分:1)

Don't parse XML with regex !

使用&amp; (一个合适的XML解析器):

 xmlstarlet edit -L -u "/context-param/param-value" -v 'true' file.xml

要匹配第N个元素,您可以稍微调整一下(从1开始):

 xmlstarlet edit -L -u "/context-param[10]/param-value[5]" -v 'true' file.xml

答案 2 :(得分:0)

sed "/<context-param>/,/<\/context-param>/ {
   /<context-param>/ h
   /<context-param>/ !H
   /<\/context-param>/ {
     x;s/<param-name>oracle.adf.view.rich.automation.ENABLED<\/param-name>/&/
     t chg
     b
:chg
     s/<param-value>false</<param-value>true</
     }" web.xml

处理section context-param,在buffer中加载,检查param-name是否是好的,如果是这种情况,则将false更改为true