Удалить строки после первого совпадения

Dec 31 2020

Мне нужно удалить все строки после первой строки, содержащей слово «лиса».

Скажем, например, для следующего входного файла "in.txt"

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

Результат будет

The quick
brown fox jumps

Я предпочитаю сценарий, созданный на awk или sed, но подойдут любые другие инструменты командной строки, такие как perl, php, python и т. Д.

Для целей поиска я добавлю эту строку:

Удалить строки после появления

Позже редактировать:

Я использую инструменты gnuwin32 в Windows, и решение, которое я смог найти, было следующим:

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

Однако я ищу решение, которое короче и переносимо (оно содержит специальную команду Windows "set / p"

Похожие вопросы:

  • Как удалить все строки после последнего появления шаблона?

  • Как удалить строки перед сохранением матча?

  • Удалите все строки перед совпадением с sed

  • Как удалить строки, начинающиеся с 1-й строки до строки, прежде чем встретить шаблон «[ERROR] -17-12-2015» с помощью sed?

  • Как удалить все строки до первого и после последнего появления строки?

Ответы

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

С GNU sed:

sed '0,/fox/!d' file

или же

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