Ich habe eine Datei, die aus mehreren Textzeilen besteht:
The first line
The second line
The third line
The fourth line
Ich habe eine Zeichenfolge, die eine der Zeilen ist: The second line
Ich möchte die Zeichenfolge und alle Zeilen danach in der Datei löschen, damit sie gelöscht wird The third line
und The fourth line
zusätzlich zur Zeichenfolge. Die Datei würde werden:
The first line
Ich habe auf Google nach einer Lösung gesucht, und es scheint, dass ich verwenden sollte sed
. Etwas wie:
sed 'linenum,$d' file
Aber wie findet man die Zeilennummer der Zeichenfolge? Oder wie soll ich es sonst machen?
Antworten:
Wenn Sie die übereinstimmende Zeile (oder die folgenden Zeilen) nicht drucken möchten:
Hier steht "Wenn Sie die Zeile erreichen, die dem Muster entspricht, beenden Sie, sonst drucken Sie jede Zeile". Die
-n
Option verhindert implizites Drucken und derp
Befehl ist erforderlich, um Zeilen explizit zu drucken.oder
Dies besagt "Löschen Sie alle Zeilen aus der Ausgabe, beginnend mit der übereinstimmenden Zeile und bis zum Ende der Datei".
aber der erste ist schneller. Die Verarbeitung wird jedoch vollständig beendet. Wenn Sie also mehrere Dateien als Argumente haben, werden die Dateien nach der ersten übereinstimmenden Datei nicht verarbeitet. In diesem Fall ist das Löschformular besser.
Wenn Sie die übereinstimmende Zeile drucken möchten, jedoch keine der folgenden Zeilen:
Hier steht "Alle Zeilen drucken und beenden, wenn die übereinstimmende Zeile erreicht ist" (die
-n
Option (kein impliziter Druck) wird nicht verwendet).Weitere Informationen finden Sie unter man sed .
quelle
co -p
z. B. RCS ), und dann sind Sie mit dersed '/The second line/,$d'
Notation besser dran .p
After;
Works.Dies ist etwas kürzer als bei anderen gegebenen Lösungen. Wenn Sie das Großbuchstaben Q beenden, wird das Drucken der aktuellen Zeile vermieden.
Um die Zeilen tatsächlich zu löschen, können Sie dieselbe Syntax verwenden.
quelle
Oder ohne gnu sed:
Oder mit grep:
quelle
sed "/$string/,\$d" inputfile
.Verwenden von awk (zeigt die übereinstimmende Linie nicht an)
quelle
Fügen Sie zuerst die Zeilennummer hinzu und löschen Sie die Zeile
mit awk
quelle
quelle