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

1

Estou tentando localizar todas as linhas em um arquivo em que 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 possam estar entre | instances. Existe uma maneira fácil de fazer isso no Vim?

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

TIA

    
por Jason Down 07.10.2010 / 15:01

1 resposta

1

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

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

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

Se você quiser ver todas essas linhas de uma só vez, combine-as com o comando :g :

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

A propósito, esse tipo de comando (do predecessor ex para vi ) é a origem do nome da ferramenta grep ( g/re/p : re short para regexp).

Se seus dados de origem forem "delimitados por canal", provavelmente você deverá verificar se algum dos valores tem caracteres de canal incorporados (talvez feitos por escape (por exemplo, com prefixo de barra invertida), duplicação ou cotação). O método regexp acima pode ser estendido para abranger a maioria dos métodos de escape e duplicação, mas a análise de valores citados geralmente requer poder de expressão expressiva do que a maioria das linguagens regulares pode oferecer.

    
por 07.10.2010 / 15:59