Como substituir uma string em um arquivo por outro?

0

Eu tenho vários arquivos que contêm uma string. Esta string precisa ser substituída por todo o conteúdo de outro arquivo (que pode ser multi-linha). Como posso fazer isso?

O que eu preciso é algo como sed -i 's/string/filename/' * onde filename é um arquivo real e não a string "filename".

Informações adicionais: o arquivo pode conter caracteres especiais, como / ou \ ou | ou [ ou ] .

    
por Foo Bar 26.06.2015 / 15:45

3 respostas

1

o bash funciona bem para isso:

$ cat replace
foo/bar\baz
the second line

$ cat file
the replacement string goes >>here<<

$ repl=$(<replace)

$ str="here"

$ while IFS= read -r line; do
    echo "${line//$str/$repl}"
done < file
the replacement string goes >>foo/bar\baz
the second line<<

O awk funcionaria, exceto que ele interpretará escapes de barra invertida (o \b no meu exemplo)

$ awk -v string="here" -v replacement="$(<replace)" '
    {gsub(string, replacement); print}
' file
the replacement string goes >>foo/baaz
the second line<<
    
por 26.06.2015 / 16:37
1

Você precisa do comando underused sed r que lê um arquivo:

sed -i '/string/{r filename
                 d}'

Suponho que você queira substituir a linha inteira, senão substitua d por algo adequado.

    
por 26.06.2015 / 17:02
0

Eu tenho isso para trabalhar:

$ foo='baz'
$ echo "foobarbaz" | sed "s/foo/${foo}/"
bazbarbaz

Levando esse passo adiante, sua primeira linha seria algo como:

$ foo='cat filename'

Isso pressupõe que você conheça o nome do arquivo antes de chegar à linha a ser substituída, é claro - se não tiver, você terá que ler a linha, obter o nome do arquivo e fazer a leitura e substituição.

    
por 26.06.2015 / 15:50

Tags