Comentando a string combinada e adicionando nova linha depois no script bash

0

Estou tentando comentar uma string correspondente em um arquivo e adicionar uma nova linha logo abaixo da string correspondente. Há alguma maneira de fazer isso ? Pode estar usando sed ou awk.

Por exemplo,

line1 is good
line2 is bad
line3 is to be commented
line4 is final

Eu quero combinar a linha 3 aqui (sem usar o número da linha) e comentá-la e adicionar uma nova linha logo abaixo dela.

Saída esperada

line1 is good
line2 is bad
#line3 is to be commented
new line
line4 is final
    
por Unnikrishnan 29.05.2017 / 10:45

1 resposta

4

Saída para o console:

sed '/^line3/s/^\(.*\)$/#\n/' testdata.txt

Substituir no arquivo e criar backup:

sed -i.bak '/^line3/s/^\(.*\)$/#\n/' testdata.txt

Substituir no arquivo:

sed -i '/^line3/s/^\(.*\)$/#\n/' testdata.txt

Explicação:

Sintaxe geral para sed:

/pattern/action

O padrão é ^line3 (substitua-o por seu padrão)

A ação é s/^\(.*\)$/#\n/

s - comando sed substituir (s / pattern1 / pattern2 /)

^ (. *) $ - Padrão RegEx para corresponder a toda a linha

# \ 1 \ n - substitua a linha por: hash (#) + referência posterior RegEx (\ 1) + nova linha (\ n)

Lembre-se de:

  • adicione barra invertida antes dos parênteses
  • cercar toda a linha com parênteses
por 29.05.2017 / 11:52