/[<]\/app-deployment/{a=0; n=0}
Итак, вы должны иметь:
getStageMode() {
targ=$1; shift
mode=$(awk '
/[<]\/app-deployment/{a=0; n=0}
/[<]app-deployment/{a=1}
a && /[<]name[>]'"${targ}[<]"'/{n=1}
a && n && /[<]staging-mode[>]/{
sub(/[<]staging-mode[>]/,"", $0)
sub(/[<]\/staging-mode[>]/,"",$0)
print $0
exit
}
{print "n=" n }
' "${@}")
echo $mode
}
Объяснение: У OP есть сгенерированный файл с узлами XML, например:
<app-deployment>
<name>gr2</name>
<target>AdminServer</target>
<module-type>ear</module-type>
<source-path>/u01/app/wls1035_homes/wls1035_9999/grc864</source-path>
<security-dd-model>DDOnly</security-dd-model>
<staging-mode>nostage</staging-mode>
</app-deployment>
<app-deployment>
<name>gr3</name>
<target>AdminServer</target>
<module-type>ear</module-type>
<source-path>/u01/app/wls1035_homes/wls1035_9999/grc864</source-path>
<security-dd-model>DDOnly</security-dd-model>
</app-deployment>
AWKскрипт устанавливает a
, когда мы находимся внутри app-deployment
XML-узла, и n
, когда у этого узла есть name
, который мы ищем.Поскольку некоторые узлы не имеют staging-mode
, исходный AWK, который не сбрасывал ни a
, ни n
, мог вернуть staging-mode
для следующего узла.Сброс этих переменных при выходе из узла должен исправить эту проблему.