Substitua 2 linhas sucessivas usando sed

0

Estou tentando substituir linhas sucessivas pelos seguintes comandos sed :

sed -i -e '/string1/{N;s/string2/string2_replaced/;N;s/string3/string3_replaced}' file1

sed -i -e '/string1/{n;s/string2/string2_replaced/;n;s/string3/string3_replaced}' file1

em que file1 contém:

string1
string2
string3

Eu continuo recebendo sed: unmatched '/' . Como posso alterar o conteúdo do arquivo1 para:

string1
string2_replaced
string3_replaced

para que string2 e string3 sejam substituídos apenas se estiverem em linhas sucessivas e se forem imediatamente após uma linha que corresponda à string1?

Além disso, como posso pesquisar e substituir a string2 se não tenho certeza de onde (qual linha) exatamente ela ocorre, mas tenho certeza de que ela ocorre após a string1?

    
por skrowten_hermit 04.05.2016 / 11:06

1 resposta

1

Você perdeu o último / , é s/string3/string3_replaced/ :

sed -e '/string1/{N;s/string2/string2_replaced/;N;s/string3/string3_replaced/}' file1

Observe que nem todas as implementações sed suportam vários comandos na mesma linha em { e } . Para portabilidade:

sed -e '/string1/ {
  N
  s/string2/string2_replaced/
  N
  s/string3/string3_replaced/
}' file1
    
por 04.05.2016 / 11:12

Tags