Оставьте только первую строку с соответствующим шаблоном - PullRequest
0 голосов
/ 01 февраля 2019

Кто-нибудь знает, как я могу найти в файле строку, а затем удалить все строки, кроме той, в которой есть первое вхождение шаблона?

Например, из

sheep
cow
pig
pig
goat

на

pig

, где pig - первая строка с этим шаблоном.

Я знаю, как удалить строки, которые не содержат шаблон:

sed -i -e '/PATTERN/!d' file

Не знаю, как сохранить только первое вхождение.

1 Ответ

0 голосов
/ 01 февраля 2019

Вы можете сказать sed для quit после первого совпадения:

sed -i '/pig/!d;q' infile

Это работает, потому что при нажатии d остальные команды игнорируются, поэтому q будет выполняться только после первого совпадения.

Или вы можете использовать опцию -m grep (работает как для GNU, так и для BSD grep, но не требуется для POSIX):

grep -m1 'pig' infile > infile.tmp && mv infile.tmp infile
...