So hängen Sie den Text aus der Quelldatei vor dem EOF in einer Zieldatei an die Zieldatei an

So hängen Sie den Text aus der Quelldatei vor dem EOF in einer Zieldatei an die Zieldatei an

Ich habe 2 Dateien. Datei 1: source.sh Datei 2: destination.sh

Ich möchte den Inhalt von Datei 1 in Datei 2 einfügen. Aber ich möchte den Inhalt nicht am Ende der Datei einfügen. Die letzte Zeile von Datei 2 ist "}"

Ich möchte den Inhalt von Datei 1 in Datei 2 vor "}" einfügen

Mein genauer Code:

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

Mein Ziel.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}"
    **}**

Ich muss source.sh in destination.sh einfügen, bevor}

Da es in der Produktion ist, möchte ich keine Zahlen fest codieren, um das EOF zu definieren... Jede Hilfe ist willkommen

Unten sehen Sie die Ausgabe des EOF in der Zieldatei

Ich habe den Befehl ausgeführt

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

Bildbeschreibung hier eingeben

Antwort1

Wenn das }Zeichen das einzige Zeichen in der letzten Zeile ist und dies die einzige Zeile mit nur einem einzelnen ist }, können Sie Datei1 an Datei2 anhängen und anschließend }in die letzte Zeile verschieben.

Codemäßig sähe das dann so aus:

# 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

Antwort2

Versuchen Sie auch - vorausgesetzt Ihre Shell bietet "Prozesssubstitution" -

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

verwandte Informationen