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


116

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

:g /price/d

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


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.