2011-09-14 11 views
5

He estado buscando en Google y no encuentro la respuesta que estoy buscando.Grep para múltiples patrones en varios archivos

Decir que tengo un archivo, text1.txt, en el directorio mydir cuyo contenido es:

one 
two 

y otro llamado text2.txt, también en mydir, cuyo contenido es:

two 
three 
four 

Estoy intentando para obtener una lista de archivos (para un directorio determinado) que contienen todos los patrones (no ninguno) que busco. En el ejemplo que he proporcionado, estoy buscando para la salida de algún lugar a lo largo de las líneas de:

./text1.txt 

o

./text1.txt:one 
./text1.txt:two 

Las únicas cosas que he podido encontrar son preocupantes Cualquiera de los patrones en una archivo, o coincidencia de varios patrones en un solo archivo (que intenté extender a un directorio completo, pero recibí errores de uso de grep).

Cualquier ayuda es muy apreciada.

Edición-cosas I han intentado

grep "pattern1" < ./* | grep "pattern2" ./* 

"redirección ambigua"

grep 'pattern1'|'pattern2' ./* 

devuelve los archivos que coinciden con el patrón ya sea

+0

¿Cuál fue el mensaje de error de uso? ¿Y cuál fue el comando que probaste? –

Respuesta

8

Una forma podría ser así:

find . | xargs grep 'pattern1' -sl | xargs grep 'pattern2' -sl 
+1

o la alternativa de esto como: 'grep -rl 'pattern1' | xargs grep 'pattern2' -l' –

+0

'grep -rlZ 'pattern1' | xargs --null grep 'pattern2' -l' para estar más seguro sobre los nombres de archivo. – Kal

3

I thin k este es lo que necesita (usted puede agregar fácilmente más patrones)

grep -EH 'pattern1|pattern2' mydir 
+1

eso es una o, OP quiere una y –

2

Para refinar la respuesta del cerebro:

find . -type f -print0 | xargs -0 grep 'pattern1' -slZ | xargs -0 grep 'pattern2' -sl 

Esto mantendrá grep de tratar a los directorios de búsqueda, y puede manejar correctamente los nombres de archivo con espacios , si pasas el indicador -Z a grep para todos menos el último patrón y pasas -0 a xargs.

Cuestiones relacionadas