Como anexar o texto do arquivo de origem ao arquivo de destino antes do EOF em um arquivo de destino

Como anexar o texto do arquivo de origem ao arquivo de destino antes do EOF em um arquivo de destino

Eu tenho 2 arquivos. Arquivo 1: origem.sh Arquivo 2: destino.sh

Quero inserir o conteúdo do Arquivo 1 no Arquivo 2. Mas não quero inserir o conteúdo no final do arquivo. A última linha do Arquivo 2 é "}"

Quero inserir o conteúdo do Arquivo 1 no Arquivo 2 antes de "}"

Meu código exato:

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}"

Meu 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}"
    **}**

Preciso inserir source.sh em destination.sh antes}

Como está em produção, não quero codificar nenhum número para definir o EOF... Qualquer ajuda será apreciada

Abaixo está a saída do EOF no arquivo de destino

Eu executei o comando

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

insira a descrição da imagem aqui

Responder1

Se o }caractere for o único caractere na última linha e esta for a única linha com apenas um único }, você poderá anexar Arquivo1 ao Arquivo2 e depois mover }para a última linha.

Em termos de código, ficaria assim:

# 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

Responder2

Tente também - dado que seu shell fornece "substituição de processo" -

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

informação relacionada