Lo que ha hecho es eliminar SUBSTITUTETHIS
donde aparece en el archivo (pero no el resto de la línea donde aparece) e insertar el contenido temp.TXT
debajo de esa línea. Si SUBSTITUTETHIS
aparece varias veces en una línea, solo se elimina la primera aparición y solo temp.TXT
se agrega una copia de .
Si desea reemplazar la línea completa cuando SUBSTITUTETHIS
aparece, use el d
comando. Dado que necesita ejecutar ambos r
y d
cuando haya una coincidencia, colóquelos en un grupo de refuerzo.
sed -e '/SUBSTITUTETHIS/ {' -e 'r temp.TXT' -e 'd' -e '}' -i devel.txt
Algunas implementaciones sed le permiten usar punto y coma para separar comandos y omitir separadores por completo entre llaves, pero aún necesita una nueva línea para terminar el argumento del r
comando:
sed -e '/SUBSTITUTETHIS/ {r temp.TXT
d}' -i devel.txt
Si desea reemplazar SUBSTITUTETHIS
por el contenido del archivo, pero conserva lo que viene antes y después en la línea, es más complicado. El método más simple es incluir el contenido del archivo en el comando sed; tenga en cuenta que deberá citar correctamente su contenido.
sed -e "s/SUBSTITUTETHIS/$(<temp.TXT sed -e 's/[\&/]/\\&/g' -e 's/$/\\n/' | tr -d '\n')/g" -i devel.txt
O usa Perl. Esto es breve pero se ejecuta cat
una vez para cada sustitución:
perl -pe 's/SUBSTITUTETHIS/`cat temp.TXT`/ge' -i devel.txt
Para leer el archivo una vez cuando se inicia el script y evitar depender de un comando de shell:
perl -MFile::Slurp -pe 'BEGIN {$r = read_file("temp.TXT"); chomp($r)}
s/SUBSTITUTETHIS/$r/ge' -i devel.txt
(presentado en dos líneas para facilitar la lectura, pero puede omitir el salto de línea). Si el nombre del archivo es variable, para evitar problemas de citas, páselo al script a través de una variable de entorno:
replacement_file=temp.TXT perl -MFile::Slurp -pe 'BEGIN {$r = read_file($replacement_file); chomp($r)}
s/SUBSTITUTETHIS/$r/ge' -i devel.txt