С учетом того, что "Синтаксический анализ XML является плохой практикой", вот awk
решение вашего вопроса:)
awk -v RS="<test-result" '
/logicalname="this\.is\.test1"/&&/result="FAILURE"/ {
sub("FAILURE","SUCCESS")
}1' RS='' infile.txt
Выше мы говорим awk
, что R запись S оператор RS
есть <test-result
, тогда для каждой записи будут выглядеть оба ШАБЛОНА(logicalname="this.is.test1"
и result="FAILURE"
), если он был там (в том же блоке ), то измените FAILURE
на SUCCESS
из заданногоinfile.txt
Как мы говорили в комментариях, поскольку вы хотите изменить определенный блок с помощью testpath=....
, вы можете добавить еще одно третье условие только к команде. ниже изменится, только если testpath="file:/this/is/the/file/path1/abcd.xml"
также видно.
обратите внимание, что вам нужно экранировать /
, и лучше также экранировать .
s.
awk -v RS="<test-result" ' /logicalname="this\.is\.test1"/&&/result="FAILURE"/&&/testpath="file:\/this\/is\/the\/file\/path1\/abcd\.xml"/
{sub("FAILURE","SUCCESS")
}1' RS='' infile.txt
Я только что нашел исправление.
Вместо того, чтобы писать
#! /bin/bash
ssh root@srv01 << 'STOP_SERVER'
date
touch /tmp/testFile
STOP_SERVER
напишите следующее
#! /bin/bash
ssh root@srv01 '
date
touch /tmp/testFile
'
Больше никаких проблем.