Ersetzen Sie das Muster in der Datei durch das Muster in der zweiten Datei

Ersetzen Sie das Muster in der Datei durch das Muster in der zweiten Datei

Ich möchte einen Teil der Daten einer Datei durch Daten aus einer anderen Datei ersetzen.

Angenommen, file1es sind die unten angegebenen Daten vorhanden und es sind einige Daten vorhanden, die ich speichern und durch Daten aus dem Startmuster file2ersetzen möchte : und dem Endmuster :.file1file2// +++ CUSTOMIZATION SETTINGS START +++// +++ CUSTOMIZATION SETTINGS END +++

In file1:

ANJALI
NISHA

// +++ CUSTOMIZATION SETTINGS START +++ 

WE WILL BE ON LEAVE FOR TODAY 

// +++ CUSTOMIZATION SETTINGS END +++ 

PREETI
MONA

In file2:

MANISH
MADHVI

// +++ CUSTOMIZATION SETTINGS START +++ 

WELCOME  ALL 

// +++ CUSTOMIZATION SETTINGS END +++ 

NISHA
TUSHAR

Als file3Ausgabe:

ANJALI
NISHA

// +++ CUSTOMIZATION SETTINGS START +++ 

WELCOME  ALL 

// +++ CUSTOMIZATION SETTINGS END +++ 

PREETI
MONA

Antwort1

$ awk '/SETTINGS START/,/SETTINGS END/ {if (FNR==NR) {a=a"\n"$0}} FNR==NR{next}   /SETTINGS START/{print substr(a,2)} /SETTINGS START/,/CUSTOMIZATION SETTINGS END/{next}  1' file2 file1
ANJALI NISHA

// +++ CUSTOMIZATION SETTINGS START +++

WELCOME ALL

// +++ CUSTOMIZATION SETTINGS END +++

PREETI MONA

Erläuterung

awkdurchläuft Dateien implizit Zeile für Zeile. In diesem Fall durchlaufen wir zuerst Datei2 und dann Datei1.

  • /SETTINGS START/,/SETTINGS END/ {if (FNR==NR) {a=a"\n"$0}}

    Der Einstellungsabschnitt aus Datei2 wird in der Variablen erfasst a.

  • FNR==NR{next}

    Wenn wir immer noch Datei2 lesen, überspringen Sie den Rest der Befehle und springen Sie zur nächsten Eingabezeile.

  • /SETTINGS START/{print substr(a,2)}

    Wenn wir hierher gelangen, verarbeiten wir Datei1. Wenn wir den Anfang des Einstellungsbereichs sehen, drucken Sie die Zeichenfolge aus, die wir in der Variablen gespeichert haben a.

  • /SETTINGS START/,/CUSTOMIZATION SETTINGS END/{next}

    Wenn wir uns im Einstellungsbereich von Datei1 befinden, überspringen Sie die restlichen Befehle und gehen Sie zur nächsten Eingabezeile.

  • 1

    1ist die kryptische Abkürzung von awk für „drucke die aktuelle Zeile“. Wir gelangen nur zu dieser Anweisung, wenn wir uns in Datei1 befinden, aber nicht im Einstellungsbereich.

verwandte Informationen