як зробити vim пошук зворотного пошуку всіх рядків із текстом


18

з grep я можу зробити grep -v "мій пошук", щоб отримати всі рядки з "мій пошук"

з sed я можу sed '/ baz /! s / foo / bar / g', щоб знайти заміну тексту на рядках з out 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_contain_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_con sadrža_pattern_and_other_helpful_searches

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.