Quiero buscar una cadena y encontrar el número de ocurrencias en un archivo usando el editor vi.
Quiero buscar una cadena y encontrar el número de ocurrencias en un archivo usando el editor vi.
Respuestas:
:g/xxxx/d
Esto eliminará todas las líneas con patrón e informará cuántas se eliminaron. Deshacer para recuperarlos después.
EL camino es
:% s / patrón // gn
Necesitas la nbandera. Para contar palabras, use:
:%s/\i\+/&/gn
y una palabra en particular:
:%s/the/&/gn
Ver count-items sección de documentación.
Si simplemente escribe:
%s/pattern/pattern/g
luego, la línea de estado también le dará el número de coincidencias en vi.
(similar a lo que dijo Gustavo, pero adicionalmente :)
Para cualquier búsqueda anterior , puede hacer simplemente:
:%s///gn
No se necesita un patrón, porque ya está en el registro de búsqueda ( @/).
"%" - do s/en todo el archivo
"g" - Búsqueda global (con golpes múltiples en una sola línea)
"n" - evita que cualquier sustitución de s/- nada se borra! ¡nada debe deshacerse!
(ver: :help s_flagpara más información)
(De esta manera, funciona perfectamente con " Buscar texto seleccionado visualmente ", como se describe en vim-wikia tip171 )
utilizar
:% s / patrón / \ 0 / g
cuando la cadena del patrón es demasiado larga y no le gusta volver a escribirla.
Respuesta corta :
:% s / cadena-a-buscar // gn
Para aprender :
Hay 3 modos en el editor VI como se muestra a continuación

:que está entrando de Commanda Command-linemodo. Ahora, todo lo que escriba después :está en CLI (interfaz de línea de comandos)%sespecifica todas las líneas. Especificar el rango como %medio hace sustitución en todo el archivo. La sintaxis para la sustitución de todas las ocurrencias es:%s/old-text/new-text/ggespecifica todas las ocurrencias en la línea. Con la gbandera, puede hacer que se sustituya toda la línea. Si este gindicador no se utiliza, solo se sustituirá la primera aparición en la línea.n especifica el número de apariciones de salida //la barra doble representa la omisión de replacement text. Porque solo queremos encontrar.Una vez que tenga el número de ocurrencias, puede presionar la Ntecla para ver las ocurrencias una por una.
Para encontrar y contar en un rango particular de línea número 1 a 10:
: 1,10s / hola // gn
%archivo completo se repone con ,números de línea separados. Para buscar y reemplazar en un rango particular de línea número 1 a 10:
: 1,10s / hola / hola / gn
Sugiero hacer:
*para hacer una "búsqueda limitada" para lo que está debajo del cursor, o haga una /patternbúsqueda estándar .:%s///gnpara obtener el número de ocurrencias. O puede usar :%s///npara obtener el número de líneas con apariciones.** Realmente pude encontrar un complemento que diera mensajes de "coincidir con N de N 1 en N 2 líneas" con cada búsqueda, pero por desgracia.
Nota: No se confunda con la complicada redacción del resultado. El primer comando podría darle algo como lo 4 matches on 3 linesque el último podría darle 3 matches on 3 lines. Si bien es técnicamente preciso, este último es engañoso y debería decir "coincidencia de 3 líneas". Entonces, como puede ver, realmente nunca hay necesidad de usar la última forma (solo 'n'). Obtiene la misma información, más claramente, y más usando el formulario 'gn'.
:g/xxxx/d) es terrible, peligrosa e inferior a otras en esta página. Anule la selección.