регулярное выражение с отрицательным соответствием (т. е. найти строку, которая не совпадает с регулярным выражением) - PullRequest
30 голосов
/ 22 июля 2009

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

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

для замены строк без ошибок пустой строкой.

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

Ответы [ 5 ]

53 голосов
/ 22 июля 2009

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

:g!/ERROR/d
8 голосов
/ 22 июля 2009

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

:%!grep ERROR

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

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

1 голос
/ 05 апреля 2010

Использование негативного взгляда сработало.

1 голос
/ 22 июля 2009

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

awk '!/ERROR/' file | more 

на машине с Windows вы можете использовать findstr

findstr /v /c:ERROR file | more
0 голосов
/ 22 июля 2009

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

...