Acrescentar uma linha no shell BASH apenas em determinadas linhas

0

Pergunta

Eu estou trabalhando em um script para efectuar alterações a um plugin do Nagios definição de serviço utilizando o BASH. Eu preciso acrescentar que o grupo de contacto para a linha de nome, mas apenas para determinadas definições de serviço. Por isso gostaria de começar com isso.

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
        }

E eu quero acrescentar apenas selecione grupo de contatos linhas. Então, digamos que eu queria para adicionar um grupo de contacto para os serviços do Linux como este.

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
        }

Existe uma maneira que pode fazer isso usando o sed ou awk ou algo mais?

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

Melhor resposta

2

com

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

Para atualizar o arquivo:

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

Usando sedse a seqüência de caracteres linux-service é único, você pode tentar correspondente a partir da linha que contém a cadeia de caracteres para a linha que contém a cadeia de caracteres contact_groups acrescentar o adicional de grupo dentro do jogo.

$ 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

Que funcionou perfeitamente. A única coisa que eu tive que mudar foi add-eu depois sed assim ele persistiu. Obrigado por sua resposta.
Jim Miller

@JimMiller Você é bem-vindo. Eu não estava ciente do lugar requisito, o pedido de desculpas.
HatLess

não se preocupe. Você tem sobre mim a parte mais difícil. Tenha um ótimo dia.
Jim Miller

Em outros idiomas

Esta página está em outros idiomas

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