Pridať riadok v BASH len na niektorých tratiach

0

Otázka

Ja som pracoval na scenári, aby sa zmeny na Nagios plugin služba, definícia pomocou BASH. Musím pridať kontakt, názov skupiny líniu, ale len pre určité služby definície. Tak by som začať s tým.

define service {
    use                     sites-service
    host_name               my_host
    service_description     check_reboot_os_updates
    check_command           check_reboot_os_updates
    contact_groups          contactgroup1
    servicegroups           MyGroup
    }
    
define service {
        use                     linux-service
        host_name               my_host
        service_description     other_description
        check_command           other_command
        contact_groups          contactgroup1
        servicegroups           MyGroup
        }

A chcem pridať, len vyberte skupina kontaktov linky. Tak som povedať, že som chcela pridať ďalší kontakt, skupinu, pre Linux služby, ako je táto.

define service {
        use                     sites-service
        host_name               my_host
        service_description     check_reboot_os_updates
        check_command           check_reboot_os_updates
        contact_groups          contactgroup1
        servicegroups           MyGroup
        }
        
define service {
        use                     linux-service
        host_name               my_host
        service_description     other_description
        check_command           other_command
        contact_groups          contactgroup1, contactgroup2
        servicegroups           MyGroup
        }

Existuje spôsob, ako môžem to urobiť pomocou sed alebo ispell alebo niečo iné?

awk bash nagios sed
2021-11-23 20:51:30
2

Najlepšiu odpoveď

2

s

awk '
  $1 == "use" {use = $2}
  use == "linux-service" && $1 == "contact_groups" {$0 = $0 ", contactgroup2"}
  {print}
' file

Ak chcete aktualizovať súbor:

  • gawk -i inplace '...' file
  • awk '...' file | sponge file -- vyžaduje moreutils package
  • f=$(mktemp); awk '...' file > "$f" && mv "$f" file
2021-11-23 21:28:53
0

Pomocou sedak je reťazec linux-service je jedinečné, môžete sa pokúsiť zodpovedajúce z riadok obsahujúci reťazec na riadok, ktorý obsahuje reťazec contact_groups pridaním dodatočných skupiny v rámci zápas.

$ sed '/linux-service/,/contact_groups/s/contact_groups.*/&, contactgroup2/' input_file
define service {
        use                     sites-service
        host_name               my_host
        service_description     check_reboot_os_updates
        check_command           check_reboot_os_updates
        contact_groups          contactgroup1
        servicegroups           MyGroup
        }

define service {
        use                     linux-service
        host_name               my_host
        service_description     other_description
        check_command           other_command
        contact_groups          contactgroup1, contactgroup2
        servicegroups           MyGroup
2021-11-23 21:19:20

Fungovalo dokonale. Jediné, čo som musel meniť bol pridať -i po sed tak to pretrvávala. Ďakujem vám za vašu odpoveď.
Jim Miller

@JimMiller Ste vítaní. Nebol som si vedomý v mieste požiadavka, ospravedlňujem sa.
HatLess

žiadne starosti. Máš na mňa cez najťažšie. Majú veľký deň.
Jim Miller

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................