如何在BASH中仅为指定Nagios服务定义追加联系组配置
实现方案
你可以直接用sed或者awk完成需求,两种常用方案如下:
方案1:sed 直接修改配置文件
匹配use为linux-service的服务块,自动追加联系组:
# 加.bak后缀自动备份原文件,确认修改无误后可删除备份 sed -i.bak '/define service {/,/}/{ /use[[:space:]]*linux-service/{ h;n;:loop /contact_groups/{s/$/, contactgroup2/;b} /}/{b} n;b loop }' 你的nagios服务配置文件路径
方案2:awk 实现(可读性更高,适合复杂扩展)
awk ' /define service {/ { in_service=1; is_target=0 } in_service && /use[[:space:]]*linux-service/ { is_target=1 } in_service && is_target && /^[[:space:]]*contact_groups/ { sub(/$/, ", contactgroup2") } /}/ { in_service=0 } 1' 原配置文件 > 临时配置文件 && mv 临时配置文件 原配置文件
注意事项
- 操作前务必提前备份配置,避免语法错误导致Nagios服务异常
- 如果你需要匹配其他服务模板,把命令中的
linux-service替换为你需要的use字段值即可 - 需要追加的联系组名称可以自行修改
contactgroup2为实际值 - 两种方案都兼容行首任意缩进、
use和值之间任意空格的格式场景,适配常规Nagios配置写法
内容的提问来源于stack exchange,提问作者Jim Miller
相关产品推荐
相关产品推荐

