
Ich möchte einen Teil der Daten einer Datei durch Daten aus einer anderen Datei ersetzen.
Angenommen, file1
es sind die unten angegebenen Daten vorhanden und es sind einige Daten vorhanden, die ich speichern und durch Daten aus dem Startmuster file2
ersetzen möchte : und dem Endmuster :.file1
file2
// +++ 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 file3
Ausgabe:
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
awk
durchlä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
1
ist 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.