我正在尝试在类似的巨大文本文件中添加nagios服务检查。 我想搜索每个主机名(作为模式),并在四行之后追加新的服务检查块。每次出现host_name后,脚本都应该能够附加新的服务检查块。
OR
希望在两个连续的行中搜索两个模式,并在文本文件中的每次出现时在两个搜索的模式之间插入文本块。
P1 - notification_options d,r P2 - }
我只知道sed的基础知识,任何帮助都会非常感激。
define service{
use new
host_name new
active_checks_enabled 0
check_freshness 0
service_description new
check_command new
check_period 24x7
}
define host{
use linux
host_name lotus
alias lotus
address 10.1.1.1
notification_options d,r
}
define service{
use linux
host_name lotus
active_checks_enabled 0
check_freshness 0
service_description Host Alive
check_command check-host-alive
check_period 24x7
}
define service{
use linux
host_name lotus
active_checks_enabled 0
check_freshness 0
service_description CPU
check_command check_cpu!95!100
check_period 24x7
notification_options w,c,r
}
define host{
use linux
host_name palm
alias palm
address 10.1.1.2
notification_options d,r
}
define service{
use linux
host_name palm
active_checks_enabled 0
check_freshness 0
service_description Host Alive
check_command checki_host
check_period 24x7
}
define service{
use linux
host_name palm
active_checks_enabled 0
check_freshness 0
service_description CPU
check_command check_cpu!95!100
check_period 24x7
notification_options w,c,r
}
define host{
use linux
host_name geeko
alias geeko
address 10.1.1.3
notification_options d,r
}
define service{
use linux
host_name geeko
active_checks_enabled 0
check_freshness 0
service_description Host Alive
check_command check_alive
check_period 24x7
}
define service{
use linux
host_name geeko
active_checks_enabled 0
check_freshness 0
service_description CPU
check_command check_cpu!95!100
check_period 24x7
notification_options w,c,r
}
答案 0 :(得分:1)
除非您需要定期执行此操作,否则听起来您想在文本编辑器中定义一个宏并使用一些聪明的搜索和替换技巧,或者,如果您确实需要一遍又一遍地执行此操作,您可能想要查看模板处理解决方案。
答案 1 :(得分:0)
这可能适合你(GNU sed):
cat <<\! >service.txt
> active_checks_enabled 0
> check_freshness 0
> service_description Host Alive
> check_command check-host-alive
> check_period 24x7
> }
> !
sed -i -e '/define host{/,/}/{/define host/h;/use/H;/host_name/H;/}/{G;s/host/service/;r service.txt' -e '}}' huge_text_file.txt