Tengo dos archivos diferentes:
Archivo1
/home/user1/
/home/user2/bin
/home/user1/a/b/c
File2
<TEXT1>
<TEXT2>
Quiero reemplazar el <TEXT1>
de File2 con el contenido de File1 usando sed
. Intenté este comando, pero no obtuve el resultado adecuado:
cat File2|sed "s/<TEXT1>/$(cat File1|sed 's/\//\\\//g'|sed 's/$/\\n/g'|tr -d "\n")/g"
Puede usar otras herramientas también para resolver este problema.
sed
implementación está utilizando. Tu código funciona para mí con GNUsed
./home/user1/ n/home/user2/bin n/home/user1/a/b/cn <TEXT2>
. No obteniendo nuevas líneas.diff
y laspatch
herramientas permiten reemplazar algunas líneas en un archivo por otras líneas con bastante facilidad.$()
en un script sed hace que mis ojos sangren. Nunca use datos externos en lugares donde algunos caracteres se interpretan con un significado especial.Respuestas:
Aquí hay una solución de script sed (más fácil a la vista que tratar de ponerla en una línea en la línea de comando):
Ejecutándolo:
fuente
sed '/<TEXT1>/{rFile1^Md^M}' File2
donde "^ M" presionas volver. El problema es que sed realmente necesita las nuevas líneas dentro de {...} para delimitar los comandos r y d.sed $'/<TEXT1>/ {r File1\n d}'
sed -e '/<TEXT1>/{r File1' -e 'd}' File2
<TEXT1>
, solo quiero reemplazar la cadena en sí, dejando el resto de la línea intacta?Text1: <TEXT1>
aText1: <file_contents>
.Me tomó mucho tiempo encontrar esta solución usando el reemplazo de var. Todas las soluciones sed no funcionaron para mí, ya que eliminan líneas completas o las reemplazan incorrectamente.
Reemplaza todas las ocurrencias de TEXT1 en el archivo2 contra el contenido del archivo1. El resto del texto permanece intacto.
fuente
sed
también, ya que esas "expansiones" (también conocidas como reemplazos) están integradas en el caparazón (bash
al menos)Respondo porque el método
diff
/patch
puede ser de interés en algunos casos. Para definir una sustitución de líneas contenidas en el archivoblob1
por líneas contenidas enblob2
uso:Por ejemplo, si
blob1
contiene:y
blob2
contiene:el generado
patch-file
será:Ahora, puede aplicar este parche a cualquier otro archivo:
Se reemplazará
hello
,you
líneas debe
,welcome
,here
líneas ensomefile
.fuente