Připojit řádek v BASHI pouze na některých tratích

0

Otázka

Já jsem pracoval na skriptu, aby se změny Nagios plugin service definition pomocí BASH. Musím se připojit kontakt, název skupiny linie, ale pouze pro určité služby, definice. Takže chtěl bych začít s tímto.

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 chci se připojit pouze zvolte skupina kontaktů linky. Tak řekněme, že bych chtěl přidat další kontaktní skupiny na Linux služby, jako je tento.

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
        }

Je tam způsob, jak mohu to udělat pomocí sed nebo awk nebo něco jiného?

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

Nejlepší odpověď

2

s

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

Aktualizovat soubor:

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

Pomocí sed, pokud řetězec linux-service je jedinečný, můžete zkusit odpovídající z řádek obsahující řetězec na řádek obsahující řetězec contact_groups přidání další skupiny v rámci zápasu.

$ 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

To fungovalo dokonale. Jediné, co jsem musel změnit, bylo-li přidat -jsem po sed, takže to vydrželi. Děkuji za vaši odpověď.
Jim Miller

@JimMiller Jste vítáni. Nebyl jsem si vědom v místě požadavek, omlouvám se.
HatLess

žádné starosti. Dostal jsi mě přes nejtěžší část. Mají velký den.
Jim Miller

V jiných jazycích

Tato stránka je v jiných jazycích

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