Como inserir texto após uma certa string em um arquivo?

59

Neste momento, estou usando echo "Hello World" >> file.txt para acrescentar algum texto a um arquivo, mas também preciso adicionar um texto abaixo de uma determinada string, digamos que "[opção]", é possível com sed ?

EG:

Arquivo de entrada

Some text
Random
[option]
Some stuff

Arquivo de saída

Some text
Random
[option]
*inserted text*
Some stuff
    
por Javier Villanueva 24.03.2014 / 15:46

3 respostas

89

Anexar linha após correspondência

  • sed '/\[option\]/a Hello World' input

Inserir linha antes da correspondência

  • sed '/\[option\]/i Hello World' input

Além disso, você pode fazer backup e editar o arquivo de entrada in-loco usando a opção -i.bkp para sed

    
por 24.03.2014 / 16:29
32

Sim, é possível com sed :

sed '/pattern/a some text here' filename

Um exemplo:

$ cat test
foo
bar
option
baz
$ sed '/option/a insert text here' test
foo
bar
option
insert text here
baz
$
    
por 24.03.2014 / 16:00
3

com awk :

awk '1;/PATTERN/{ print "add one line"; print "\and one more"}' infile

Lembre-se de que alguns caracteres não podem ser incluídos literalmente, portanto, é necessário usar seqüências de escape (eles começam com uma barra invertida). para imprimir uma barra invertida literal, é necessário escrever \ .

Na verdade, é o mesmo com sed , mas além disso, cada nova linha incorporada no texto precisa ser precedida por uma barra invertida:

sed '/PATTERN/a\
add one line\
\and one more' infile

Para mais detalhes sobre sequências de escape, consulte o manual.

    
por 01.02.2017 / 14:27