【问题标题】:string replace using sed/awk linux bash使用 sed/awk linux bash 替换字符串
【发布时间】:2019-08-07 01:04:24
【问题描述】:

下面是我用于监控系统的配置文件,我想通过 linux bash 更改下面文件中的字符串。

我想扫描完整的文件并查找 default_not_os_not_oracle 块,然后将我看到的 testemail 字符串更改为仅在 default_not_os_not_oracle 块中的 alertmail。 我不介意在 python/perl/sed/awk 方式的解决方案中获得帮助

#
<!-- 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>
#

【问题讨论】:

  • 考虑使用适当的 XML 解析器 bc sed 不适用于此类任务。
  • 最好的方法是使用 XML 解析器,例如 xmlstarlet 或直接使用 xslt,两者都基于 xpath。通常不建议使用sedawk等工具或任何其他基于行的处理工具来更改XML文件,因为它们具有复杂的结构。对于一次性任务,如果您确切知道事物的外观,那通常不是问题。但是,如果您不知道文件的外观,或者您必须做无数次,请使用 XML 解析器。

标签: sed replace


【解决方案1】:

输入输出文件的保存方式:

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

【讨论】:

    猜你喜欢
    • 2017-02-08
    • 2015-10-25
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 2016-05-01
    • 2022-07-21
    • 2015-10-12
    • 1970-01-01
    相关资源
    最近更新 更多