2012-09-10 11 views
6

¿Cómo puedo hacer que el comando grep ubique ciertas palabras en los archivos especificados por las rutas encontradas por el comando locate?Use el comando grep y ubique

locate my.cnf | grep user 

(Quiero que grep comando de búsqueda de la palabra "usuario" en los archivos encontrados para localizar comando)

Respuesta

10

En lugar de un reemplazo de comandos tubería, utilice:

grep user `locate my.cnf` 
+0

Me gusta mejor que el enfoque 'xargs' a continuación porque mantiene el resaltado de grep –

+0

@moeso: Puedes obtener grep para dar siempre salida de color con' --color = always'. – cha0site

0

Probablemente grep user $(locate my.cnf) es lo que está buscando, si entiendo bien su pregunta.

+3

Tenga en cuenta que esto se bloqueará y se quemará si el comando 'locate' devuelve demasiados datos. El tamaño de la línea de comando no es infinito. – cha0site

10

Probar:

locate my.cnf | xargs grep user 
+0

Esta opción es correcta, pero Matt respondió primero y funciona. Gracias. – Jhonathan

+2

@Jhonathan: si el resultado es bastante pequeño, Matt trabaja. Si el resultado puede ser arbitrariamente grande, debe preferir 'xargs'. –

0

Con el fin de jugar bien con situaciones en las que ubicar resultados tienen espacios en los nombres, usted puede hacer esto

locate -0 my.cnf | xargs -n1 -0 grep user 
+0

Muestra la misma salida tres veces – Jhonathan

+0

Sin ningún conmutador 'grep' genera automáticamente todas las líneas coincidentes (es probable que su archivo tenga varias líneas que coincidan). Si desea mostrar los números de línea frente a ellos, puede usar el interruptor '-n' para grep. De lo contrario, podría hacer que muestre solo la primera coincidencia para cada archivo con '-m 1' o solo el nombre del archivo que coincida con' -l'. –

+0

Tienes razón. Lo siento, – Jhonathan