Как добавить текст из исходного файла в целевой файл перед EOF в целевом файле

Как добавить текст из исходного файла в целевой файл перед EOF в целевом файле

У меня есть 2 файла. Файл 1: source.sh Файл 2: destination.sh

Я хочу вставить содержимое Файла 1 в Файл 2. Но я не хочу вставлять содержимое в конец файла. Последняя строка Файла 2 — это "}"

Я хочу вставить содержимое Файла 1 в Файл 2 перед "}"

Мой точный код:

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

Мой пункт назначения.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}"
    **}**

Мне нужно вставить source.sh в destination.sh перед}

Поскольку он находится в производстве, я не хочу жестко кодировать какие-либо числа для определения EOF... Любая помощь приветствуется.

Ниже представлен вывод EOF в файле назначения.

Я выполнил команду

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

введите описание изображения здесь

решение1

Если }символ является единственным символом в последней строке, и это единственная строка с единственным символом }, вы можете добавить File1 к File2, а затем переместить }на последнюю строку.

С точки зрения кода это будет выглядеть так:

# 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

решение2

Попробуйте также - учитывая, что ваша оболочка обеспечивает "замену процесса" -

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

Связанный контент