2017-12-19 3 views
-1

Ich habe die folgenden zwei Dateien test.txt und test1.txt. ich die Daten von test.txt um test1.txt unter abc.com jedoch aktualisieren möchten, zuerst hat es die vorhandenen Daten zu entfernen, so endgültig Ausgabe sieht wie folgt test1.txt unter Ausgabedatei AbschnittWie löschen und den Inhalt in der zweiten Datei zu aktualisieren Shell mit

test.txt

10.100.4.10 
10.100.4.11 
10.100.4.12 

test1.txt

[abc.com] 
10.100.44.10 
10.100.44.11 

[xyz.com] 
10.100.55.10 
10.100.55.11 

[etc ..]

OUTPUT FILE

test1.txt

[abc.com] 
10.100.4.10 
10.100.4.11 
10.100.4.12 

[xyz.com] 
10.100.55.10 
10.100.55.11 
+0

Das Ziel ist, dass Sie einen eigenen Code (zu Ihrer Frage) hinzufügen, um zumindest die Forschungsbemühungen zu zeigen, die Sie unternommen haben, um das Problem selbst zu lösen. – Cyrus

+0

Werfen Sie einen Blick auf diesen Link, es zeigt in die richtige Richtung: https://unix.stackexchange.com/questions/32908/how-to-insert-the-content-of-a-file-into-another-file -before-a-pattern-marker – kvantour

Antwort

0

Wenn Sie die Adresse abc.com vorher wissen und dass die Einträge durch eine Leerzeile getrennt sind dann die folgenden sed Befehle verwenden . Der erste löscht die Zeilen zwischen abc.com und der ersten leeren Zeile und der zweite fügt den gewünschten Text aus test1.txt ein.

$ sed '/^\[abc\.com\]/,/^$/{/^\[abc\.com\]/!{/^$/!d}}' test.txt | sed '/^\[abc.com\]/r test1.txt' 
[abc.com] 
10.100.4.10 
10.100.4.11 
10.100.4.12 

[xyz.com] 
10.100.55.10 
10.100.55.11 
+0

Nun, wenn ich manuell unter Befehl ausführen, funktioniert es. Im Skript, wenn ich den Domänennamen und die Datei angerufen habe, funktioniert es nicht. /bin/sed -i '/\babc.com/,/^$/{/^[0-9]/d};/\babc.com/r test.txt' /tmp/test1.txt Unten ist der Aufruf im Bash-Skript. Ich habe versucht, folgenden Befehl mit dem Wert und seinem richtigen Wert zu echo. Was schief gelaufen ist. /bin/sed -i '/ \ b $ dmname /,/^ $/{/^[0-9]/d};/\ b "$ dmname"/r $ datei' /tmp/test1.txt – user213618

+0

gelöst. unten im Bash-Skript/bin/sed -i "/ \ b $ dmname /,/^ $/{/^[0-9]/d};/\ b" $ dmname "/ r $ datei"/tmp/test1.txt – user213618

+0

Ja, wenn Sie eine variable Bash-Erweiterung möchten, müssen Sie doppelte Anführungszeichen verwenden. Ich sehe auch, dass Sie ein anderes Löschkriterium verwenden. Wenn alle Zeilen, die Sie löschen müssen, mit einer Zahl beginnen, ist es in Ordnung, aber wenn vor den Zahlen ein Leerzeichen steht, wird es übersprungen – SigmaPiEpsilon

Verwandte Themen