ed: erste Zeile als aktuelle Standardzeile festlegen

ed: erste Zeile als aktuelle Standardzeile festlegen

Ich versuche, eddie erste Zeile einer großen Datei zu bearbeiten, muss aber warten, edbis alle Zeilen gelesen sind. Gibt es eine Möglichkeit, eddas Lesen der gesamten Datei zu unterbrechen und sofort mit der Bearbeitung zu beginnen, wobei die aktuelle Zeile die erste Zeile ist?

Antwort1

Wie von Shellter angemerkt, edist dies nicht möglich. Die meisten Bearbeitungsvorgänge erfordern, dass die Datei neu geschrieben wird. Nur Ersetzungen können direkt vor Ort vorgenommen werden. In diesem Fall können Sie verwenden hexedit(1).

Der am wenigsten speicherintensive Weg ist die Verwendung sedvon Operationen, z. B. zum Ersetzen vonAugustmitJuniin der ersten Zeile:

sed '1s/August/June/' FILE > NEWFILE

Antwort2

Es ist nicht möglich, eddas Einlesen einer gesamten Datei zu stoppen oder nach dem Öffnen eines Dokuments mit dem Editor die erste Zeile des Bearbeitungspuffers automatisch zur aktuellen Zeile zu machen.

Der edEditor platziert Sie immer in der letzten Zeile, die von einem Befehl betroffen ist (oder direkt danach oder davor, wenn der Befehl ist d), und das Einlesen einer Datei beim Start ist vergleichbar mit der Verwendung von e filename, das den aktuellen Bearbeitungspuffer verwirft, die benannte Datei zum Bearbeiten öffnet und die aktuelle Zeile auf die letzte aus der Datei gelesene Zeile setzt.

Möchten Sie Änderungen an einem großen Dokument auf nicht-interaktive Weise vornehmen, dann sind die Verwendung von sedoder awkmöglicherweise bessere Alternativen, da diese Tools mit Streams arbeiten und standardmäßig nicht das gesamte Dokument in den Speicher lesen.

Wenn Sie große Dokumente wirklich interaktiv bearbeiten möchten, können Sie versuchen, das Dokument mit in Abschnitte aufzuteilen split, die Abschnitte, die Sie ändern möchten, zu bearbeiten (mit edoder vioder einem anderen Editor) und catdie Abschnitte dann einfach mit wieder zusammenzufügen.


Hypothetische Bearbeitungssitzung zum Bearbeiten der ersten 5 Zeilen einer großen Datei in ed:

$Ed.
e! Kopf -n 5 riesige Datei
123
g/^/m0
w ! { cat - ; tail -n +6 riesige Datei ; } > riesige Datei.neu
Q

Das heißt, eine Aufforderung, die Ausgabe von zu bearbeiten head -n 5 hugefile. Die Bearbeitung, die ich hier vornehme, besteht einfach darin, die Zeilen umzukehren ( g/^/m0, „verschiebe jede Zeile nacheinander vor die erste Zeile“). Dann schreibe ich den geänderten Bearbeitungspuffer in einen Shell-Befehl, der den Inhalt des Puffers mit Zeile 6 und weiter aus der Originaldatei verknüpft. Das Ergebnis wird in einen neuen Dateinamen geschrieben. QDann beendet ich den Editor.

verwandte Informationen