Поскольку вы изначально просили sed
решение, я добавляю одно:
sed '/./{H;1h;$! d}
g;/{p}$/d
s#^{p}.*#&\n{/p}#;p
s/.*/{p}/;h;d' somefile.txt
Пояснение
Используйтеawk
:
awk 's;/^three$/{s=1}' file
или
awk 's;$0=="three"{s=1}' file
s;
напечатает строку, если переменная s
верна, что имеет место в первый раз после того, как шаблон/слово было найдено... /^three$/{s=1}
установит для переменной s
значение true (1 ), если найден шаблон/слово. С GNUsed
:
sed 0,/three/d
Обратите внимание, что Linux — это ядро, в нем нет утилит. GNU sed
— это реализация sed
, обычно встречающаяся в системах GNU/Linux, таких как Debian GNU/Linux. GNU sed
предшествовал Linux и был скомпилирован для работы на большинстве Unix -подобных систем, включая большинство тех, которые используют Linux в качестве ядра. Сама по себе она является свободной, бесплатной и открытой реализацией -(с несколькими расширениями, включая этот 0
адрес )утилиты UNIX sed
конца 70-х годов.
С POSIX sed вы можете сделать как:
sed -ne '/three/!d;:a;n;p;ba' inp.file
Использование Perl:
perl -lne 'print if 1 <(/three/...eof)' inp.file