Entfernen Sie die Linien nach dem ersten Spiel

Dec 31 2020

Ich muss alle Zeilen nach der ersten Zeile entfernen, die das Wort "Fuchs" enthält.

Sagen Sie zum Beispiel für die folgende Eingabedatei "in.txt"

The quick
brown fox jumps
over
the
lazy dog
the second fox
is hunting

Das Ergebnis wird sein

The quick
brown fox jumps

Ich bevorzuge ein Skript, das in awk oder sed erstellt wurde, aber alle anderen Befehlszeilentools sind gut, wie Perl oder PHP oder Python usw.

Zu Suchzwecken werde ich diese Zeile hinzufügen:

Linien nach dem Auftreten entfernen

Später bearbeiten:

Ich verwende gnuwin32-Tools in Windows und die Lösung, die ich finden konnte, war folgende:

grep -m1 -n fox in.txt | cut -f1 -d":" > var.txt
set /p MyNumber=<var.txt
head -%MyNumber% in.txt > out.txt

Ich suche jedoch nach einer Lösung, die kürzer und portabel ist (diese enthält den Windows-spezifischen Befehl "set / p").

Ähnliche Fragen:

  • Wie lösche ich alle Zeilen nach dem letzten Auftreten des Musters?

  • Wie lösche ich Zeilen vor einer Übereinstimmung, die sie beibehält?

  • Entfernen Sie alle Linien vor einem Match mit sed

  • Wie lösche ich die Zeilen ab der ersten Zeile bis zur Zeile, bevor ich mit sed auf das Muster '[ERROR] -17-12-2015' stoße?

  • Wie lösche ich alle Zeilen vor dem ersten und nach dem letzten Auftreten einer Zeichenfolge?

Antworten

3 Cyrus Dec 31 2020 at 03:59
awk '{print} /fox/{exit}' file

Mit GNU sed:

sed '0,/fox/!d' file

oder

sed -n '0,/fox/p' file