замена строки с использованием sed / awk linux bash - PullRequest
0 голосов
/ 16 марта 2019

ниже - это мой конфигурационный файл для системы мониторинга, и я хочу изменить строку на файл ниже, желательно через linux bash.

Я хочу отсканировать полный файл и найти блок default_not_os_not_oracle, а затем изменить место, где я вижу строку testemailотправлять оповещения только в блоке default_not_os_not_oracle.я не против получить помощь в решении проблемы на python / perl / sed / awk way

#
<!-- language: lang-xml -->
<instance:default_oracle>
<map>
/ora.*
/arch.*
</map>
<mail>
<to> %DBA% </to>
</mail>
</instance>

<instance:default_not_os_not_oracle>
<map> (?!/$|/users|/auto|/dev|/tmp|/var|/ora|/arch).* </map>
<action> mail </action>
<mail>
<to> testemail </to>
</mail>
</instance>


<instance:diskmon>
<warn>
<ge> 75 </ge>
<action> mail </action>
</warn>
<crit>
<ge> 90 </ge>
<action> page,mail </action>
</crit>
<map>
/apps
</map>
<mail> <to> abc@gmail.com </to> </mail>
<page> <to> abc@gmail.com </to> </page>
</instance>
#

1 Ответ

0 голосов
/ 17 марта 2019

Способ сохранения с файлом ввода и вывода:

sed "/default_not_os_not_oracle/,/\/instance/s/testemail/alertmail/g" infile.xml >outfile.xml

или на месте

sed -i "/default_not_os_not_oracle/,/\/instance/s/testemail/alertmail/g" infile.xml
...