Substituindo uma string por um arquivo usando Sed [closed]

4

Digamos que eu tenha dois arquivos foo e bar . Eu quero uma substituição da string " isto é teste " em foo com o conteúdo do arquivo bar . Como posso fazer isso usando um forro sed ?

Eu usei:

sed -i.bak 's/this is test/$(cat bar)\n/g' foo 

mas a string está sendo substituída pelo literal $(cat bar) em vez do conteúdo de bar . Eu tentei usar citações, mas o resultado continua o mesmo.

A resposta de Radu está correta no que diz respeito à citação. Agora o problema é que digamos que meu arquivo bar contém:

this
is
a
test
file

Agora, se eu executar o comando, será exibido um erro:

  

sed: -e expressão # 1, char 9: comando 'não terminado'

18 vezes.

    
por heemayl 23.10.2014 / 12:50

2 respostas

5

O comando a seguir deve funcionar para o que você deseja:

sed "s/this is test/$(cat bar)/" foo

Se foo contiver mais de uma linha, você poderá usar:

sed "s/this is test/$(sed -e 's/[\&/]/\&/g' -e 's/$/\n/' bar | tr -d '\n')/" foo

ou:

sed -e '/this is a test/{r bar' -e 'd}' foo

Fonte dos dois últimos comandos: Substituir padrão dentro de um arquivo pelo conteúdo de outro arquivo

Para fazer a alteração no arquivo foo , use sed -i .

    
por Radu Rădeanu 23.10.2014 / 13:07
5

Um caminho:

sed -e '/this is test/r bar' -e '/this is test/d' foo

Resultado da amostra:

$ cat bar
12
23
$ cat foo
ab
this is test
cd
this is test
ef
$  sed -e '/this is test/r bar' -e '/this is test/d' foo
ab
12
23
cd
12
23
ef
    
por Guru 23.10.2014 / 13:34

Tags