O que você fez foi remover SUBSTITUTETHIS
onde quer que ele apareça no arquivo (mas não o restante da linha em que aparece) e inserir o conteúdo temp.TXT
abaixo dessa linha. Se SUBSTITUTETHIS
aparecer várias vezes em uma linha, apenas a primeira ocorrência será removida e apenas uma cópia temp.TXT
será adicionada.
Se você deseja substituir a linha inteira quando SUBSTITUTETHIS
aparecer, use o d
comando Como você precisa executar os dois r
e d
quando houver uma correspondência, coloque-os em um grupo preparado.
sed -e '/SUBSTITUTETHIS/ {' -e 'r temp.TXT' -e 'd' -e '}' -i devel.txt
Algumas implementações sed permitem usar ponto-e-vírgula para separar comandos e omitir completamente os separadores entre chaves, mas você ainda precisa de uma nova linha para finalizar o argumento do r
comando:
sed -e '/SUBSTITUTETHIS/ {r temp.TXT
d}' -i devel.txt
Se você deseja substituir SUBSTITUTETHIS
pelo conteúdo do arquivo, mas reter o que vem antes e depois na linha, é mais complicado. O método mais simples é incluir o conteúdo do arquivo no comando sed; observe que você precisará citar adequadamente seu conteúdo.
sed -e "s/SUBSTITUTETHIS/$(<temp.TXT sed -e 's/[\&/]/\\&/g' -e 's/$/\\n/' | tr -d '\n')/g" -i devel.txt
Ou use Perl. Isso é curto, mas é executado cat
uma vez para cada substituição:
perl -pe 's/SUBSTITUTETHIS/`cat temp.TXT`/ge' -i devel.txt
Para ler o arquivo uma vez quando o script iniciar, e evite depender de um comando do shell:
perl -MFile::Slurp -pe 'BEGIN {$r = read_file("temp.TXT"); chomp($r)}
s/SUBSTITUTETHIS/$r/ge' -i devel.txt
(apresentado em duas linhas para facilitar a leitura, mas você pode omitir a quebra de linha). Se o nome do arquivo for variável, para evitar problemas de citação, passe-o para o script por meio de uma variável de ambiente:
replacement_file=temp.TXT perl -MFile::Slurp -pe 'BEGIN {$r = read_file($replacement_file); chomp($r)}
s/SUBSTITUTETHIS/$r/ge' -i devel.txt