Usuń linie po pierwszym meczu

Dec 31 2020

Muszę usunąć wszystkie wiersze po pierwszym wierszu zawierającym słowo „lis”

Powiedz na przykład dla następującego pliku wejściowego „in.txt”

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

Wynik będzie

The quick
brown fox jumps

Wolę skrypt wykonany w awk lub sed, ale inne narzędzia wiersza poleceń są dobre, takie jak perl, php lub python itp.

Dla celów wyszukiwania dodam następującą linię:

Usuń linie po wystąpieniu

Późniejsza edycja:

Używam narzędzi gnuwin32 w systemie Windows, a rozwiązanie, które znalazłem, to:

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

Jednak szukam rozwiązania, które jest krótsze i przenośne (to zawiera polecenie specyficzne dla systemu Windows „set / p”

Podobne pytania:

  • Jak usunąć wszystkie linie po ostatnim wystąpieniu wzorca?

  • Jak usunąć linie przed utrwaleniem dopasowania?

  • Usuń wszystkie linie przed dopasowaniem za pomocą seda

  • Jak usunąć linie zaczynające się od pierwszej linii do linii przed napotkaniem wzorca „[ERROR] -17-12-2015” przy użyciu seda?

  • Jak usunąć wszystkie wiersze przed pierwszym i po ostatnim wystąpieniu ciągu?

Odpowiedzi

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

Z GNU sed:

sed '0,/fox/!d' file

lub

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