Как удалить все строки, которые не содержат определенного слова в Vim?

116

В VIM я могу удалить все строки, которые содержат слово «цена» с этим

:g /price/d

Как я могу удалить все строки, которые НЕ содержат слово «цена»?

digitaljoel
источник
1
Можно ли перенести этот вопрос на vi.stackexchange.com ? Я пытался пометить его для миграции, но не смог понять.
Mu Mind
@MuMind Это по теме здесь, поэтому не нужно мигрировать . « Не переносите ради миграции. Мы переносим вопросы только потому, что они не по теме на исходном сайте . Вполне возможно, что вопрос будет находиться на нескольких сайтах, но это не является причиной для миграции это в другом месте, если OP не запрашивает миграцию. " Кроме того, только сотрудники SE могут мигрировать через 60 дней, и это происходит очень редко (даже модераторы не могут перенести старый вопрос).
8bittree

Ответы:

158

Вы можете использовать

:%g!/price/d

удалить каждую строку, которая не содержит «цену»

Яб
источник
3
Я знал, что это будет легко ...
digitaljoel
35
:g!также известен как :v(сродни grep -v).
Крис Джонсен
3
Что делает %?
hippietrail
4
%это специальный диапазон в этом контексте, что означает весь файл. См :help cmdline-ranges.
Гептит
1
%является необязательным, поскольку диапазон по умолчанию - весь буфер.
Stillanoob
4
%!grep "price"

это еще один вариант, который может быть значительно быстрее, чем :vдля больших файлов.

Протестировано на Vim 7.4, Ubuntu 14.04, 1M файл журнала строки.

Строки, содержащие слово: https://stackoverflow.com/questions/1725265/how-can-i-delete-all-lines-that-do-not-begin-with-termin-characters/42714334#42714334

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник