1

我正在尝试使用在配置文件中附加主机名sed,因为我需要添加多个主机,所以我想自动化它。我遇到以下情况:

示例输入文件:

#######################################################################
#
#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”,因此要将其添加到我搜索过“服务:系统正常运行时间”的特定服务中从那里开始的第 7 行我搜索“host_name”并附加新主机。

我已经完成了我想要使用的操作sed

sed   '/Service: System Uptime/{N;N;N;N;N;N;N;N;/host_name/s|$|,NewHost|}' input file 

现在的问题是,当那里有多个主机时,上面的sed命令会失败,它会换行并附加主机。

对此有何建议?

4

2 回答 2

2

我不确定我是否理解您的问题,并且我无法根据您提供的配置文件片段重现它。话虽如此,我相信以下命令大致相当于您的命令,并且不依赖于基于“行数”的搜索。

sed   '/Service: System Uptime/,/host_name/{/host_name/s|$|,NewHost|}' input_file
于 2013-06-27T12:39:32.953 回答
2

你为什么要使用sed?这是一份工作awk

awk '/#Service: System Uptime/ {a=1} 
  a && /host_name/ { a=0; $0 = $0 ", new_host" } 1' input-file
于 2013-06-27T13:06:23.830 回答