O que você fez foi remover SUBSTITUTETHISonde quer que ele apareça no arquivo (mas não o restante da linha em que aparece) e inserir o conteúdo temp.TXTabaixo dessa linha. Se SUBSTITUTETHISaparecer várias vezes em uma linha, apenas a primeira ocorrência será removida e apenas uma cópia temp.TXTserá adicionada.
Se você deseja substituir a linha inteira quando SUBSTITUTETHISaparecer, use o dcomando Como você precisa executar os dois re dquando 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 rcomando:
sed -e '/SUBSTITUTETHIS/ {r temp.TXT
d}' -i devel.txt
Se você deseja substituir SUBSTITUTETHISpelo 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 catuma 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