Cómo agregar el texto del archivo de origen al archivo de destino antes del EOF en un archivo de destino

Cómo agregar el texto del archivo de origen al archivo de destino antes del EOF en un archivo de destino

Tengo 2 archivos. Archivo 1: fuente.sh Archivo 2: destino.sh

Quiero insertar el contenido del Archivo 1 en el Archivo 2. Pero no quiero insertar el contenido al final del archivo. La última línea del Archivo 2 es "}"

Quiero insertar el contenido del Archivo 1 en el Archivo 2 antes de "}"

Mi código exacto:

xxx_ecmwf_scoring_state_machine_arn = "${aws_sfn_state_machine.xxx_ecmwf_main_state_machine.id}"

 xxx_ecmwf_etl_state_machine_arn = "${aws_sfn_state_machine.xxx_ecmwf_etl_state_machine.id}"

 xxx_ecmwf_scoring_function_name = "${aws_lambda_function.invoke_xxx_ecmwf_scoring_state_machine_lambda.function_name}"

Mi destino.sh

{
    zzz_ecmwf_scoring_state_machine_arn = "${aws_sfn_state_machine.zzz_ecmwf_main_state_machine.id}"

    zzz_ecmwf_etl_state_machine_arn = "${aws_sfn_state_machine.zzz_ecmwf_etl_state_machine.id}"

    zzz_ecmwf_scoring_function_name = "${aws_lambda_function.invoke_zzz_ecmwf_scoring_state_machine_lambda.function_name}"

    ccc_ecmwf_scoring_state_machine_arn = "${aws_sfn_state_machine.ccc_ecmwf_main_state_machine.id}"

    ccc_ecmwf_etl_state_machine_arn = "${aws_sfn_state_machine.ccc_ecmwf_etl_state_machine.id}"


    ccc_ecmwf_scoring_function_name = "${aws_lambda_function.invoke_ccc_ecmwf_scoring_state_machine_lambda.function_name}"

    rrr-ltf_ecmwf_scoring_state_machine_arn = "${aws_sfn_state_machine.rrr-ltf_ecmwf_main_state_machine.id}"

    rrr-ltf_ecmwf_etl_state_machine_arn = "${aws_sfn_state_machine.rrr-ltf_ecmwf_etl_state_machine.id}"

    rrr-ltf_ecmwf_scoring_function_name = "${aws_lambda_function.invoke_rrr-ltf_ecmwf_scoring_state_machine_lambda.function_name}"

    rrr_ecmwf_scoring_state_machine_arn = "${aws_sfn_state_machine.rrr_ecmwf_main_state_machine.id}"

    rrr_ecmwf_etl_state_machine_arn = "${aws_sfn_state_machine.rrr_ecmwf_etl_state_machine.id}"

    rrr_ecmwf_scoring_function_name = "${aws_lambda_function.invoke_rrr_ecmwf_scoring_state_machine_lambda.function_name}"
    **}**

Necesito insertar source.sh en target.sh antes}

Dado que está en producción, no quiero codificar ningún número para definir el EOF... Se agradece cualquier ayuda.

A continuación se muestra la salida del EOF en el archivo de destino.

Ejecuté el comando

{ echo "---------"; nl "$filenamelocal" | tail -n 4 ; echo "---------"; }

ingrese la descripción de la imagen aquí

Respuesta1

Si el }carácter es el único carácter en la última línea y esta es la única línea con un solo archivo }, puede agregar Archivo1 a Archivo2 y luego moverlo }a la última línea.

En términos de código, esto se vería así:

# append file1 to file2
cat File1 >> File2
# move the curly brace to the end of the file (change in place (-i flag))
# /^}$/ search for a line which starts with a } and ends afterwards
# d     delete the line
# ;     next command
# $a    append at the last line
# }     curly brace character
sed -i '/^}$/d;$a}' File2

Respuesta2

Pruebe también, dado que su shell proporciona "sustitución de procesos",

tac file2 | sed 1r<(tac file1) | tac

información relacionada