insere texto na posição específica com grep ou vim [closed]

0

Eu preciso inserir texto em uma posição específica, mas a linha pode estar em qualquer lugar, porque o arquivo é enorme, de 1000 a 2000 linhas, e as informações são adicionadas no meio ou em qualquer lugar.

Uma versão curta do exemplo abaixo:

 1 define service{
 2         service_description             version-check-aix
 3         use                             passive-service
 4         max_check_attempts              1
 5         initial_state                   o
 6         notifications_enabled           0
 7         host_name                       hosts1,host2
 8 }
 9
10 define service{
11         service_description             version-check-unix
12         use                             passive-service
13         max_check_attempts              1
14         notifications_enabled           0
15         host_name                       hosts1,host2
16 }
17 define service{
18         service_description             version-check-linux
19         use                             passive-service
20         initial_state                   o
21         notifications_enabled           0
22         host_name                       hosts1,host2 

Eu preciso anexar o host3 no final da linha que contém host_name<tab><something here>,host3 . No meu exemplo, seria na linha 15. (Os números de linha são para ilustração e não estão presentes no arquivo de dados.)

Posso fazer grep -in version-check-unix e inserir "host3"? Como?

    
por user138530 14.05.2017 / 15:44

1 resposta

1

Você deseja acrescentar algo a uma linha que corresponda a determinados critérios. Isso pode ser feito com sed , entre outros.

Vamos supor que os critérios de correspondência sejam: A linha tem a string "host_name" e depois (depois de alguns espaços e / ou TABs) "hosts1, host2"; você deseja adicionar ", host3". Então isso funcionaria:

cat file | sed 's/\(^[\t ]\+host_name[\t ]\+hosts1,host2$\)/,host3/g' > newfile

em que file é o arquivo original e newfile o novo arquivo editado.

    
por 14.05.2017 / 17:37

Tags