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 \v
garante que o regexp funcione independentemente do valor da magic
opçã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 :g
comando:
:g/\v(\|[^|]*){21,}/p
Aliás, este tipo de comando (doexantecessor devi) é a origem do nome da grep
ferramenta ( 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.