как сделать vim поиск обратный поиск всех строк без текста


18

с помощью grep я могу выполнить grep -v "мой поиск", чтобы получить все строки без "моего поиска"

С помощью sed я могу использовать sed '/ baz /! s / foo / bar / g', чтобы найти заменяющий текст в строках без нашего baz

Есть ли способ сделать то же самое, vim. И это возможно, но без синтаксиса "s ///". Используя только синтаксис поиска "/".

Ответы:


29
:g/pattern/

соответствует всем строкам, в которых найден шаблон.

:v/pattern/

делает обратное. Смотрите :h globalдля более подробной информации.

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

:v/pattern/norm Ipattern not found - <CR>

добавить "шаблон не найден -" к каждой строке, которая не имеет "шаблон" или

:v/pattern/s/nrettap/pattern

заменить "nrettap" на "pattern" в каждой строке, которая не имеет "pattern".

Придуманные примеры, да.


Я бы на "Nrettap".
UncleZeiv

6

Например, для поиска строк, не содержащих foo:

/^\(\(.*foo.*\)\@!.\)*$

Источник: http://vim.wikia.com/wiki/Search_for_lines_not_conisting_pattern_and_other_helpful_searches


1
Я не знал о директиве \ @, которая позволяет вам ссылаться на предыдущий атом в поиске. Очень полезный.
nelaaro

Даже если это правильно, это действительно дорого.
Бенуа

1

Использование: v commandEdit Традиционный подход для поиска строк, не соответствующих шаблону, использует команду : v :

:v/Warning/p

Оптимальный прием при работе с большим файлом журнала, где вы хотите отфильтровать как можно больше ненужных строк перед тем, как приступить к реальному поиску, - сохранить файл под временным именем и удалить все несоответствующие строки:

:sav junk.log
:v/warning/d

Теперь вы редактируете клон вашего исходного файла, все строки которого не соответствуют предупреждению и вы можете редактировать его по своему усмотрению.

Ссылка: https://vim.fandom.com/wiki/Search_for_lines_not_conisting_pattern_and_other_helpful_searches

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