Cómo hacer grep con una lista de palabras

81

Tengo un archivo A con 100 palabras separadas por nuevas líneas. Me gustaría buscar el archivo B para ver si ALGUNA de las palabras del archivo A aparece en él.

Intenté lo siguiente pero no me funciona:

grep -F A B
fénix
fuente

Respuestas:

112

Necesitas usar la opción -f:

$ grep -f A B

La opción -Frealiza una búsqueda de cadena fija donde -festá para especificar un archivo de patrones. Es posible que desee ambos si el archivo solo contiene cadenas fijas y no expresiones regulares.

$ grep -Ff A B

Es posible que también desee la -wopción de hacer coincidir solo palabras completas:

$ grep -wFf A B

Lea man greppara obtener una descripción de todos los posibles argumentos y lo que hacen.

Chris Seymour
fuente
4
¿-F es solo una optimización si no desea usar expresiones regulares?
Phoenix
¿Qué hay de encontrar todas las apariciones de palabras en el archivo A en un árbol de directorios B , enumerando solo los nombres de archivo de todas las coincidencias en B?
Zealoushacker
2

Para encontrar una lista muy larga de palabras en archivos grandes, puede ser más eficiente usar egrep:

remove the last \n of A
$ tr '\n' '|' < A > A_regex
$ egrep -f A_regex B
Alcolo47
fuente