我在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'值,这些值不应随之改变。
答案 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)
使用xmlstarlet&amp; xpath(一个合适的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