Ich muss einen großen Textblock (Shell-Skriptcode) in einer Datei durch einen anderen Textblock ersetzen.
Ich bin beeindruckt von Wie kann ich sed verwenden, um eine mehrzeilige Zeichenfolge zu ersetzen? beantwortet von antak und Multi-Line-Ersatz beantwortet von Bruce Ediger
Aber ich habe einige Probleme damit.
antak hat bereits in seiner Antwort erwähnt, dass das Streaming der gesamten Datei (
1h;2,$H;$!d;g;
) in den Puffer für große Dateien nicht ratsam ist, da dadurch der Speicher überlastet wird.Ich weiß,
sed
dass mit der Blockfunktion der Text außerhalb des Blocks unverändert beibehalten werden kann. Ich möchte diese Funktion verwenden. Aber wenn ich benutze,sed -i '/marker1/,/marker2/s/.*/new text (code)/' filename
Für jeden Stream wird wiederholt neuer Text (Code) eingefügt. Daher muß ich den visuellen Block als einen Strom machen, etwas mit ähnlich zu dem, was vorgeschlagen Antak früher, aber für den Block (nicht für ganze Datei).
Wie von Bruce Ediger erwähnt, kann die Append-Funktion ausprobiert werden,
ex
die mita
end with.
(dot) beginnt , aber mein neuer Text (code) enthält Zeilen, die mit dot beginnen, was als Punkt der Append-Syntax betrachtet werden kann. Wie kann ich es in dieser Situation verwenden?ex
'sdd
' Anzahl der Zeilen 'kann mehrere Zeilen löschen, aber wenn ich einen Block zwischen / marker1 / und / marker2 / habe, dessen Anzahl nicht festgelegt (variierend) ist, muss er durch neuen Text (Code) ersetzt werden es?
sed
oder der ex
Befehl funktioniert).
r
den Befehl read file verwendet, um den Text aus einer anderen Datei zu kopieren, wenn sich die Quelle für den Ersatztext in einer Datei befindet.