2009-07-30 9 views
23

Cuando utilizo el comando:Usando grep para buscar archivos proporcionados por find: qué hay de malo con find. | xargs grep '...'?

find . | xargs grep '...' 

me sale los partidos equivocadas. Estoy tratando de buscar la cadena ... en todos los archivos de la carpeta actual.

+3

tiene usted más ejemplos? –

+4

, primero, debes aprender cómo hacer la pregunta correctamente. Técnicamente, no tiene nada de malo. la pregunta es qué quieres hacer. describirlo de manera adecuada y clara – ghostdog74

+0

¿quieres decir, qué obtengo como respuesta? – cupakob

Respuesta

37

Como dijo Andy White, usted tiene que utilizar fgrep con el fin de coincidir para . llano, o escapar los puntos.

Así que hay que escribir (-type f es sólo para que los archivos: es obvio que no quiere que los directorios.):

find . -type f | xargs fgrep '...' 

o si aún desea utilizar grep:

find . -type f | xargs grep '\.\.\.' 

y si sólo desea que el directorio actualy no a sus subdirectorios:

find . -maxdepth 1 -type f | xargs fgrep '...' 
+2

'grep -F '...'' debería funcionar igual de bien – Hasturkun

+2

@Hasturkun: Sí. Simplemente tengo la tendencia a preferir diferentes nombres de comando que opciones adicionales (como usar 'gunzip' en lugar de' gzip -d'). Solo una cuestión de gusto por lo general. –

2

Si está literalmente escribiendo grep '...', coincidirá con cualquier cadena. Dudo que esté realmente escribiendo '...' para su comando grep, pero si lo está, el ... coincidirá con tres caracteres.

Por favor, publique más información sobre lo que está buscando, y tal vez alguien pueda ayudarlo más.

1

Si usted está buscando un nombre de archivo que coincide con, intente:

find . -name "filename pattern" 

o

find . | grep "filename pattern" 

Si su búsqueda de archivos en busca de ese partido (es decir, que contiene el grep string)

find . | xargs grep "string pattern" 

funciona bien. o simplemente:

grep "string pattern" -R * 
+0

sí, estoy buscando archivos que contengan "..." como cadena, pero: 1. encontrar. | xargs grep "patrón de cadena" o 2. grep "patrón de cadena" -R * no ayuda. – cupakob

7

'.' coincide con cualquier personaje, por lo que encontrará todas las líneas que contengan 3 o más caracteres.

Usted puede escapar de los puntos, como este:

find . | xargs grep '\.\.\.' 

O puede utilizar fgrep, lo que hace un partido literal en lugar de un partido de expresiones regulares:

find . | xargs fgrep '...' 

(Algunas versiones de grep también acepta una bandera -F que los hace comportarse como fgrep.)

-1

Para completar la respuesta de Jeremy, es posible que también desee probar

find . -type f | xargs grep 'your_pattern' 

o

find . -type f -exec grep 'your_pattern' {} + 

que es similar a un xargs

podría añadir: RTFM! O de una manera más amable: utilizar & abuso de

man command 

!

+1

Más educado? Lea el manual amistoso? ¿Cómo podría ser considerado descortés? Monstruo educado. :) –

+0

Las páginas del manual son bastante amigables y esperamos leerlas una y otra vez. (Hiciste mi día, Jeremy XD) –

+0

Cuanto más tarde se pone, más desagradable me parecen mis comentarios. Creo que estoy alcanzando un máximo ahora. Es todo cuesta abajo desde aquí. –

5

@OP, si usted está buscando para los archivos que contienen ...,

grep -R "\.\.\." * 
+1

Con mucho, la solución más simple. grep tiene la búsqueda recursiva de archivos integrada. – duckbrain

Cuestiones relacionadas