Aqui está uma solução de script sed (mais fácil para os olhos do que tentar colocá-lo em uma linha na linha de comando):
/<TEXT1>/ {
r File1
d
}
Executando:
$ sed -f script.sed File2
/home/user1/
/home/user2/bin
/home/user1/a/b/c
<TEXT2>
Eu tenho dois arquivos diferentes:
/home/user1/
/home/user2/bin
/home/user1/a/b/c
<TEXT1>
<TEXT2>
Eu quero substituir o <TEXT1>
de Arquivo2 pelo conteúdo de Arquivo1 usando sed
. Eu tentei este comando, mas não obtive a saída adequada:
cat File2|sed "s/<TEXT1>/$(cat File1|sed 's/\//\\//g'|sed 's/$/\n/g'|tr -d "\n")/g"
Você também pode usar outras ferramentas para resolver esse problema.
Aqui está uma solução de script sed (mais fácil para os olhos do que tentar colocá-lo em uma linha na linha de comando):
/<TEXT1>/ {
r File1
d
}
Executando:
$ sed -f script.sed File2
/home/user1/
/home/user2/bin
/home/user1/a/b/c
<TEXT2>
Demorei muito tempo para encontrar essa solução usando a substituição de var. Todas as soluções sed não funcionaram para mim, pois elas excluem linhas completas ou substituem incorretamente.
FILE2=$(<file2)
FILE1=$(<file1)
echo "${FILE2//TEXT1/$FILE1}"
Substitui todas as ocorrências de TEXT1 no arquivo2 pelo conteúdo do arquivo1. Todos os outros textos permanecem intocados.
Eu respondo porque o método diff
/ patch
pode ser interessante em alguns casos.
Para definir uma substituição de linhas contidas no arquivo blob1
por linhas contidas em blob2
use:
diff -u blob1 blob2 > patch-file
Por exemplo, se blob1
contiver:
hello
you
e blob2
contém:
be
welcome
here
o patch-file
gerado será:
--- blob1 2011-09-08 16:42:24.000000000 +0200
+++ blob2 2011-09-08 16:50:48.000000000 +0200
@@ -1,2 +1,3 @@
-hello
-you
+be
+welcome
+here
Agora, você pode aplicar este patch a qualquer outro arquivo:
patch somefile patch-file
Ele substituirá hello
, you
linhas por be
, welcome
, here
linhas em somefile
.