Estoy buscando buscar varios archivos con múltiples valores.
Por ejemplo: grep -f filename.txt /home/* -R
(nombre de archivo.txt contiene varios valores)
Pero necesito saber qué archivo contenía qué valor.
Por ejemplo: /home/blah.txt contiene valor1, /home/aaa.txt contiene valor2, etc.
¿alguna sugerencia?
Respuesta1
Puedes hacer esto usando algunas de las banderas proporcionadas por grep
.
Puedes probar el siguiente comando:
grep -R -f filename.txt /home/*
buscará cualquier patrón dentro de su filename.txt
archivo y lo comparará recursivamente con todos los archivos dentro de su carpeta de inicio. Obtendrás un resultado como este:
#here my filename contains the entries bash and Bingo
$grep -R -f filename.txt /home/*
/home/user/.bash_history:vi .bashrc
/home/user/.bash_history:vi .bashrc
/home/user/.bash_history:awk -v RS=END_WORD '/Bingo1/ && /Bingo2/' test2.txt | grep -o 'Pokeman.*'
grep
generará el nombre del archivo y la línea completa que contiene su patrón.
Si solo desea mostrar el patrón encontrado, pruebe el siguiente comando:
#here the -o flag only displays the matched values, and -n adds the line number
$grep -R -o -n -f test /home/*
/home/user/.bash_history:128:bash
/home/user/.bash_history:156:bash
/home/user/.bash_history:193:Bingo
Respuesta2
Esto debería funcionar para su situación:
grep -HRnF '<pattern>' . --include "<file_name>"
Entonces, para buscar la palabra 'prueba' en todos los archivos que terminan en .txt, use algo como:
grep -HRnF 'test' . --include "*.txt"
Respuesta3
GNU grep
tiene la opción -o
:
-o, --solo-coincidencia
Imprima solo las partes coincidentes (no vacías) de una línea coincidente, con cada una de esas partes en una línea de salida separada.
Entonces esto debería hacer lo que quieras.
grep -f filename.txt -R -H -o /home/*
Tenga en cuenta que también agregué -H
(-with-filename) para imprimir el nombre del archivo siempre.