Подтвердить что ты не робот

Регулярное выражение с отрицательным соответствием (т.е. найти строку, которая не соответствует регулярному выражению _doesn't_)

У меня есть файл журнала со строкой "ОШИБКА" на некоторых строках. Я хочу удалить каждую строку, у которой нет ERROR, чтобы я мог видеть, что нужно для исправления. Я собирался сделать что-то вроде vim:

% s/! (ОШИБКА)//

чтобы заменить строки без ошибок пустой строкой.

Я не верю, что стандартные регулярные выражения могут это сделать, но, возможно, я ошибаюсь...

4b9b3361

Ответ 1

Используйте команду :g! для удаления каждой строки, которая не соответствует.

:g!/ERROR/d

Ответ 2

В vim вы можете запустить любую команду фильтра в тексте в буфере. Например,

:%!grep ERROR

заменит весь буфер только строками, которые соответствуют данному регулярному выражению.

Это полезно не только для grep, например, вы можете сортировать строки в буфере с помощью :%!sort. Или вы можете сделать то же самое для любого диапазона текста, используя команду V, чтобы пометить блок, а затем :!filter-command (vim автоматически заполнит '<,'>, чтобы указать текущий маркированный блок).

Ответ 3

if on * nix, вы можете использовать grep -v или awk

awk '!/ERROR/' file | more 

на компьютере с Windows, вы можете использовать findstr

findstr /v /c:ERROR file | more

Ответ 5

Отрицательное соответствующее регулярное выражение будет использовать ^ Напр. [^ E] будет соответствовать всем, кроме E.