0

同様の巨大なテキスト ファイルに nagios サービス チェックを追加しようとしています。各ホスト名を (パターンとして) 検索し、4 行の後に新しいサービス チェック ブロックを追加したいと考えました。スクリプトは、host_name が出現するたびに、新しいサービス チェック ブロックを追加できる必要があります。

                     OR

連続する 2 行で 2 つのパターンを検索し、テキスト ファイル内で出現するたびに、検索された 2 つのパターンの間にテキスト ブロックの下に挿入します。

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
}
4

2 に答える 2

1

定期的にこれを行う必要がない限り、テキスト エディターでマクロを定義し、いくつかの巧妙な検索と置換のトリックを使用する必要があるように思えます。これを何度も行う必要がある場合は、テンプレート処理ソリューションを検討したい。

于 2012-08-24T19:01:45.523 に答える
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
于 2012-08-25T00:41:53.573 に答える