Ich habe zwei verschiedene Dateien:
Datei1
/home/user1/
/home/user2/bin
/home/user1/a/b/c
Datei2
<TEXT1>
<TEXT2>
Ich möchte das <TEXT1>
von File2 mit dem Inhalt von File1 ersetzen, das verwendet sed
. Ich habe diesen Befehl ausprobiert, erhalte aber keine korrekte Ausgabe:
cat File2|sed "s/<TEXT1>/$(cat File1|sed 's/\//\\\//g'|sed 's/$/\\n/g'|tr -d "\n")/g"
Sie können auch andere Tools verwenden, um dieses Problem zu lösen.
sed
Implementierung Sie verwenden. Ihr Code funktioniert für mich mit GNUsed
./home/user1/ n/home/user2/bin n/home/user1/a/b/cn <TEXT2>
. Keine neuen Zeilen bekommen.diff
undpatch
können einige Zeilen in einer Datei ganz einfach durch andere Zeilen ersetzt werden.$()
wenn ich zufällige Daten verwende, die in einem Sed-Skript gesammelt wurden, bluten meine Augen. Verwenden Sie niemals externe Daten an Stellen, an denen bestimmte Zeichen mit besonderer Bedeutung interpretiert werden.Antworten:
Hier ist eine sed-Skript-Lösung (einfacher für die Augen, als zu versuchen, sie in einer Zeile in der Befehlszeile zusammenzufassen):
Laufen es:
quelle
sed '/<TEXT1>/{rFile1^Md^M}' File2
wo "^ M" drückt man die Eingabetaste. Das Problem ist, dass sed wirklich die Zeilenumbrüche innerhalb von {...} benötigt, um den Befehl r und den Befehl d abzugrenzen.sed $'/<TEXT1>/ {r File1\n d}'
sed -e '/<TEXT1>/{r File1' -e 'd}' File2
<TEXT1>
ich, anstatt die gesamte Zeile zu ersetzen, nur die Zeichenfolge selbst ersetzen und den Rest der Zeile intakt lassen möchte?Text1: <TEXT1>
zuText1: <file_contents>
.Ich habe lange gebraucht, um diese Lösung mit var replacement zu finden. Alle sed-Lösungen haben bei mir nicht funktioniert, da sie entweder komplette Zeilen löschen oder falsch ersetzen.
Ersetzt alle Vorkommen von TEXT1 in Datei2 gegen den Inhalt von Datei1. Alle anderen Texte bleiben unberührt.
quelle
sed
, da diese "Erweiterungen" (auch bekannt als Ersatz) (bash
zumindest) in die Shell eingebaut sindIch antworte, weil die
diff
/patch
-Methode in einigen Fällen von Interesse sein könnte. So definieren Sie eine Ersetzung der in der Dateiblob1
enthaltenen Zeilen durch die in derblob2
Verwendung enthaltenen Zeilen :Zum Beispiel, wenn
blob1
enthält:und
blob2
enthält:das erzeugte
patch-file
wird sein:Jetzt können Sie diesen Patch auf jede andere Datei anwenden:
Es wird ersetzen
hello
,you
Linien durchbe
,welcome
,here
Linien insomefile
.quelle