Come posso trovare tutte le righe con più di N occorrenze di un personaggio usando Vim


1

Sto cercando di individuare tutte le righe in un file in cui il carattere |(pipe) compare più di 21 volte. Il |personaggio è un delimitatore di campo, quindi non esiste un numero specifico di caratteri che possono cadere tra le |istanze. C'è un modo semplice per farlo in Vim?

NOTA: sto usando gVim su un computer Windows, quindi non sarò in grado di usare alcun trucco specifico * nix.

TIA

Risposte:


1

Puoi usare un regexp per trovare tali righe con la normale funzione di ricerca:

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

Il \vsi assicura l'espressione regolare funziona indipendentemente dal valore della magicopzione (si fa tutti i caratteri non alfanumerici (ad eccezione di sottolineatura) speciale, lo uso anche qui per evitare di dover mettere backslash prima del (, ), {, e }).

Se vuoi vedere tutte queste righe contemporaneamente, puoi combinarle con il :gcomando:

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

Per inciso, questo tipo di comando ( dall'ex predecessore a vi ) è l'origine del nome dello grepstrumento ( g/re/p: abbreviazione di regexp).


Se i tuoi dati di origine sono "delimitati da pipe", probabilmente dovresti verificare se uno qualsiasi dei valori ha caratteri di pipe incorporati (forse eseguiti tramite escape (ad esempio prefisso con una barra rovesciata), raddoppio o citazione). Il metodo regexp sopra può essere esteso per coprire la maggior parte dei metodi di escape e raddoppio, ma l'analisi dei valori indicati di solito richiede un potere espressivo di potenza che la maggior parte dei linguaggi regexp può offrire.


Il file è delimitato da pipe e il problema è che in alcuni campi sono presenti alcuni caratteri pipe non di escape che non dovrebbero essere presenti (causando un problema con un programma basato sul presupposto che non ci siano caratteri pipe a meno che non vengano usato come delimitatore). Volevo esaminare il file per avere un'idea di quante righe fossero "illegali". Ad ogni modo, la tua risposta ha funzionato alla grande. Grazie per l'aiuto.
Jason Down,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.