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 n
bandera. 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_flag
para 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 Command
a Command-line
modo. Ahora, todo lo que escriba después :
está en CLI (interfaz de línea de comandos)%s
especifica 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/g
g
especifica todas las ocurrencias en la línea. Con la g
bandera, puede hacer que se sustituya toda la línea. Si este g
indicador 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 N
tecla 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 /pattern
búsqueda estándar .:%s///gn
para obtener el número de ocurrencias. O puede usar :%s///n
para 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 lines
que 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.