Como adicionar uma nova linha após o “test message1” usando o sed? [duplicado]

9

Na verdade, eu tenho um arquivo chamado test1.txt .

Nesse arquivo, tenho as cinco linhas a seguir:

 'test message1'
 'test message2'
 'test message3'
 'test message4'
 'test message5'

Agora, desejo adicionar uma nova linha 'testing testing' ao arquivo test1.txt após a linha 'test message1' . Como fazer isso?

    
por Beginner 14.08.2014 / 11:30

3 respostas

13

Isso é o que o a o comando faz:

sed -e "/test message1/a\
'testing testing'" < data

Este comando irá:

Queue the lines of text which follow this command (each but the last ending with a \, which are removed from the output) to be output at the end of the current cycle, or when the next input line is read.

Portanto, neste caso, quando combinamos uma linha com /test message1/ , executamos o comando a ppend com o argumento de texto " 'testing testing' ", que se torna uma nova linha do arquivo:

 'test message1'
 'testing testing'
 'test message2'
 'test message3'
 'test message4'
 'test message5'

Você pode inserir várias linhas terminando cada uma das linhas não finais com uma barra invertida. A barra invertida dupla acima é para evitar que a casca a coma; Se você estiver usando em um script sed autônomo, use uma única barra invertida. O GNU sed aceita uma única linha de texto imediatamente após a , mas isso não é portátil.

    
por 14.08.2014 / 11:42
1

com sed :

sed "s/'test message1'/'test message1'\n'testing testing'/g"
  • Procura por 'mensagem de teste1'
  • Substitui por "test message1" [nova linha] "testes de teste".

De esta resposta , você também pode usar:

sed "/'test message1'/a 'testing testing'"
  • Procura por 'mensagem de teste1'
  • Anexa o "teste de teste" após as correspondências.
por 14.08.2014 / 11:41
0

POSIXly:

$ sed -e "/'test message1'/s//&\
'testing testing'/" file
'test message1'
'testing testing'
'test message2'
'test message3'
'test message4'
'test message5'
    
por 14.08.2014 / 13:41

Tags