¿Cómo contaría cada aparición de un término en todos los archivos en el directorio actual? - y subdirectorios (?)
He leído que para hacer esto usarías grep
; ¿Cuál es el comando exacto?
Además, ¿es posible lo anterior con algún otro comando?
command-line
files
directory
grep
Dime por qué
fuente
fuente
PCREs
debería usarse ya que son experimentales-F
probablemente sería más rápido.-F
lugar de-P
. Gracias por la gran sugerencia, la actualización usando-F
, que de hecho encaja mejor aquí.grep -Rc [term] *
lo haré. El-R
indicador significa que desea buscar de forma recursiva el directorio actual y todos sus subdirectorios. El*
es un selector de archivos que significa: todos los archivos. La-c
bandera hace que lagrep
salida solo sea el número de ocurrencias. Sin embargo, si la palabra aparece varias veces en una sola línea, solo se cuenta una vez.De
man grep
:Si no tiene enlaces simbólicos en su directorio, no hay diferencia.
fuente
-c
bandera agrep
. Entonces grep cuenta y no necesitas elwc
--
antes*
*
única ampliará a los no comienzan con un punto, por lo que se le pasa a todos aquellos. Tiene más sentido simplemente usar "." ya que de todos modos va a procesar argumentos de forma recursiva, y eso obtendrá archivos de puntos. El mayor problema aquí es que esto podría ser el número de líneas, no el número de apariciones de una palabra. Si el término aparece varias veces en una línea, solo se contará una vez por "grep -c"En un pequeño script de Python:
count_string.py
.Ejecútelo desde el directorio con el comando:
Notas
Explicación:
fuente
root
yf
para qué?root
es la ruta al archivo que incluye "arriba" del directorio actual,f
es el archivo. Alternativamente,os.path.join()
podría usarse, pero es más detallado.n = n + open(f).read().count(s)
?Como una variante de la buena respuesta de @ kos, si está interesado en detallar los recuentos, puede usar el
-c
interruptor de grep para contar las ocurrencias:fuente