Mostrar el recuento coincidente de todos los archivos que contienen una palabra

Mostrar el recuento coincidente de todos los archivos que contienen una palabra

¿Cuál es el comando único que se utiliza para identificar solo el recuento coincidente de todas las líneas dentro de los archivos del /etcdirectorio que contienen la palabra "HOST"?

Debo enumerar sólo los archivos con coincidencias y suprimir cualquier mensaje de error.

Respuesta1

Para contar las coincidencias, enumera solo los nombres de archivo y cuenta:

grep -src HOST /etc/*

Salida de ejemplo:

/etc/postfix/postfix-files:1
/etc/security/pam_env.conf:6
/etc/X11/app-defaults/Ddd.3.3.11:1
/etc/X11/app-defaults/Ddd:1
/etc/zsh/zshrc:0
/etc/zsh/zshenv:0

La -copción suprime la salida normal e imprime un recuento de coincidencias para cada archivo.

Si desea suprimir los archivos con recuentos cero:

grep -src HOST /etc/* | grep -v ':0$'

Para imprimir el número de línea ( -n) y el nombre de archivo ( -H) para cada línea coincidente para cualquier número de archivos de entrada:

grep -srnH HOST /etc/*

Salida de ejemplo:

/etc/lynx-cur/lynx.cfg:254:.h2 LYNX_HOST_NAME
/etc/lynx-cur/lynx.cfg:255:# If LYNX_HOST_NAME is defined here or in userdefs.h, it will be
/etc/X11/app-defaults/Ddd.3.3.11:8005:    DDD 3.3.11 (@THEHOST@) gets @CAUSE@\n\
/etc/X11/app-defaults/Ddd:8010:    DDD 3.3.12 (@THEHOST@) gets @CAUSE@\n\

La opción -rhace grepque se busquen archivos de forma recursiva en cada subdirectorio en todos los niveles del directorio especificado. La -sopción suprime los mensajes de error.

Para suprimir coincidencias de archivos binarios, utilice la -Iopción.

Verman greppara más información.

Respuesta2

No es un comando, sino una línea.

algo como

 grep -r ',,HOST' . | wc -l

Respuesta3

La pregunta está redactada un poco extraña. Primero pregunta la cantidad de líneas que coinciden en todos los archivos, luego quiere que enumeres los nombres de los archivos.

Para contar las líneas coincidentes en todos los archivos:

grep -R "HOST" /etc 2> /dev/null | baño -l

Para enumerar los nombres de los archivos:

grep -Rl "HOST" /etc 2> /dev/null

Respuesta4

grep -c HOST *

… Deberías hacerlo.

información relacionada