我正在尝试使用sed
在主机名中附加主机名,因为我需要添加多个主机,所以我想自动化它。我遇到以下情况:
示例InputFile:
#######################################################################
#
#Service: System Uptime
#######################################################################
define service{
use generic-service
host_name host1,host2,host3,host4,host5,host6,host7,host8,host9,host10,host11,host12,host13,host14,host15,host16,host17,host18,host19,host20,host21,host22,host23,host24,host25,host26,host27,host28,host29,host30
service_description System Uptime
is_volatile 0
check_period 24x7
contact_groups Test_group
notification_options c,w,r,u
check_command check_nt_uptime
max_check_attempts 3
normal_check_interval 1
retry_check_interval 1
notification_interval 120
notification_period 24x7
}
尝试实现的是将新主机附加到“host_name”行,但文件中出现了很多“host_name”,因此要为特定服务添加它,我搜索了“Service:System Uptime”然后在那里的第7行,我搜索“host_name”并附加新的主机。
我已经使用sed
完成了我想要的事情:
sed '/Service: System Uptime/{N;N;N;N;N;N;N;N;/host_name/s|$|,NewHost|}' input file
现在的问题是,当有多个主机时,上面的sed
命令失败,它会中断该行并附加主机。
有关于此的任何建议吗?
答案 0 :(得分:2)
我不确定我是否理解您的问题,但我无法根据您提供的配置文件片段重现它。 话虽如此,我相信以下命令大致相当于你的命令,并不依赖于基于“行数”的搜索。
sed '/Service: System Uptime/,/host_name/{/host_name/s|$|,NewHost|}' input_file
答案 1 :(得分:2)
您为什么要使用sed
?这是awk
的作业:
awk '/#Service: System Uptime/ {a=1}
a && /host_name/ { a=0; $0 = $0 ", new_host" } 1' input-file