Tengo un archivo de texto ( devel.xml).
Le agregué la palabra REPLACETHIS para reemplazar esta cadena con el contenido dentro de un archivo diferente ( temp.txt).
Lo más cercano que tengo es esto:
sed -i -e "/REPLACETHIS/r temp.TXT" -e "s///" devel.txt;
Esto inserta el contenido después de la cadena y luego elimina la cadena.
¿Es esta la mejor manera de hacerlo?
text-processing
sed
perl
RafaelGP
fuente
fuente

Respuestas:
Lo que ha hecho es eliminar
SUBSTITUTETHISdonde aparece en el archivo (pero no el resto de la línea donde aparece) e insertar el contenidotemp.TXTdebajo de esa línea. SiSUBSTITUTETHISaparece varias veces en una línea, solo se elimina la primera aparición y solotemp.TXTse agrega una copia de .Si desea reemplazar la línea completa cuando
SUBSTITUTETHISaparece, use eldcomando. Dado que necesita ejecutar ambosrydcuando haya una coincidencia, colóquelos en un grupo de refuerzo.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
rcomando:Si desea reemplazar
SUBSTITUTETHISpor 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.O usa Perl. Esto es breve pero se ejecuta
catuna vez para cada sustitución:Para leer el archivo una vez cuando se inicia el script y evitar depender de un comando de shell:
(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:
fuente
cat temp.txtpoder hacerlocat ${variable}?-0777interruptor para slurp en todo el archivo, y un regularopen:perl -0777 -pe 'BEGIN {open F, q(temp.TXT); $r=<F>; chomp($r)} s/SUBSTITUTETHIS/$r/ge' -i devel.txtr temp.TXTfinalizar con mensajes como "BEGIN temp.TXT", "END temp.TXX"a(agregar) comando. grymoire.com/Unix/Sed.html#uh-36