Verwenden eines Shell-Skripts zum Hinzufügen eines „“ nach der letzten Zeile in einer großen Datei

Verwenden eines Shell-Skripts zum Hinzufügen eines „“ nach der letzten Zeile in einer großen Datei

Ich brauche einen SED- oder AWK-Befehl, um die letzte Zeile in einer Datei zu finden und </pre>sie zu ergänzen.

Wie zum Beispiel:

LINELINELINE

Änderungen an:

LINELINELINE</pre>

Antwort1

Sie können auch eine so genanntezusammengesetzter Befehl.Dabei handelt es sich um eine Liste von Befehlen, die von der Shell für alle Zwecke außerhalb des zusammengesetzten Befehls als ein einziger Befehl behandelt werden.

Ja, das ist eine etwas rekursive Definition; ein Beispiel macht es leichter verständlich.

Um beispielsweise eine Datei mit <pre>und zu umgeben </pre>, können Sie einen Befehl wie den folgenden verwenden:

( printf '<pre>' ; cat originalfile ; printf '</pre>' ) > newfile

Wenn Sie keine temporäre Datei haben, sondern die Ausgabe eines Befehls mit etwas anderem umgeben möchten, können Sie diesen Befehl anstelle von Folgendem einfügen cat:

( printf '<pre>' ; find / -type d -print ; printf '</pre>' ) > somefile

Dies alles funktioniert, indem die Umleitung auf die Ausgabe des gesamten zusammengesetzten Befehls angewendet wird, anstatt nur auf seine Teile.

Natürlich wird hier nicht sedoder awkwie gewünscht verwendet, aber für diese Art von Aufgabe ist der Einsatz dieser Tools völlig übertrieben.

Antwort2

Wie wäre es damit:

echo "</pre>" >> /path/to/the/file

Oder es ist am Anfang etwas kniffliger, da müsste man für die Ausgabe eine andere Datei verwenden.

echo "<pre>" | cat - /path/to/the/file > /path/to/the/newfile

catbedeutet Verketten und hat in diesem Fall zwei Argumente: Das -bedeutet Standardeingabe, sodass der erste Teil der verketteten Datei das ist, was dorthin weitergeleitet wird (in diesem Fall das echo). Das zweite Argument ist die Datei, der Sie voranstellen möchten. Die verketteten Dateien werden dann an ausgegeben newfile.

Antwort3

Mit (GNU) sed(gemäß Tag in der Frage):

$ sed -i -e '$a\</pre>' file.in

Dieser Willehinzufügeneine Zeile mit </pre>darauf zu file.in.

Alternative:

$ sed -i -e '$s@\(.*\)@\1</pre>@' file.in

Dies wird </pre>der letzten Zeile in hinzugefügt file.in.

verwandte Informationen