Como encontro todas as linhas com mais de N ocorrências de um caractere usando o Vim

Como encontro todas as linhas com mais de N ocorrências de um caractere usando o Vim

Estou tentando localizar todas as linhas em um arquivo onde o |caractere (pipe) ocorre mais de 21 vezes. O |caractere é um delimitador de campo, portanto não há um número específico de caracteres que podem ocorrer entre |as instâncias. Existe uma maneira fácil de fazer isso no Vim?

NOTA: Estou usando o gVim em uma máquina Windows, então não poderei usar nenhum truque específico do *nix.

TIA

Responder1

Você pode usar um regexp para encontrar essas linhas com a função de pesquisa normal:

/\v(\|[^|]*){21,}

O \vgarante que o regexp funcione independentemente do valor da magicopção (torna todos os caracteres não alfanuméricos (exceto sublinhado) especiais; também o uso aqui para evitar ter que colocar barras invertidas antes de (, ), {e }).

Se quiser ver todas essas linhas de uma vez, você pode combiná-las com o :gcomando:

:g/\v(\|[^|]*){21,}/p

Aliás, este tipo de comando (doexantecessor devi) é a origem do nome da grepferramenta ( g/re/p: é a abreviação de regexp).


Se seus dados de origem forem “delimitados por barra vertical”, você provavelmente deverá verificar se algum dos valores possui caracteres de barra vertical incorporados (talvez feito por escape (por exemplo, prefixado com uma barra invertida), duplicação ou aspas). O método regexp acima pode ser estendido para cobrir a maioria dos métodos de escape e duplicação, mas a análise de valores citados geralmente requer poder expressivo do que a maioria das linguagens regexp pode oferecer.

informação relacionada