como fazer uma busca inversa por vim para todas as linhas sem texto

16

com grep eu posso fazer um grep -v "minha pesquisa" para obter todas as linhas sem a "minha pesquisa"

com sed eu posso sed '/ baz /! s / foo / bar / g' para encontrar substituir texto em linhas sem baz

Existe uma maneira de fazer a mesma coisa vim. E é possível, mas sem a sintaxe "s ///". Usando apenas a sintaxe de pesquisa "/".

    
por nelaaro 30.01.2012 / 12:56

2 respostas

27
:g/pattern/

corresponde a todas as linhas em que o padrão foi encontrado.

:v/pattern/

faz o oposto. Veja :h global para mais detalhes.

Você pode usá-lo assim:

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

para preceder "padrão não encontrado -" para todas as linhas que não têm "padrão" ou

:v/pattern/s/nrettap/pattern

para substituir "nrettap" por "padrão" em todas as linhas que não tenham "padrão".

Exemplos construídos, sim.

    
por 30.01.2012 / 13:57
5

Para procurar as linhas não contendo foo, por exemplo, faça:

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

Fonte: link

    
por 30.01.2012 / 13:20