2011-11-12 17 views
58

Hola, estoy intentando buscar en el directorio de mis raíles usando grep. Estoy buscando una palabra específica y quiero grep para imprimir el nombre del archivo y el número de línea. ¿Hay una bandera grep que haga esto por mí? He estado tratando de usar una combinación de -n y -l, pero estos están imprimiendo los nombres de los archivos sin números o simplemente arrojando una gran cantidad de texto al terminal que no se puede leer fácilmente.Grep list nombre de archivo y número de línea

ejemplo:

grep -ln "search" * 

¿Es necesario que la tubería a una awk?

Respuesta

88

creo -l es demasiado restrictiva, ya que suprime la salida de -n. Sugeriría -H (--with-filename): Imprima el nombre del archivo para cada coincidencia.

grep -Hn "search" * 

Si eso le da una salida muy alta, trate -o para imprimir sólo la parte que corresponda.

grep -nHo "search" * 
21

grep -rin searchstring * | cut -d":" -f1-2

Esto sería decir, busca de forma recursiva (para la cadena 'searchstring' en este ejemplo), ignoran caso, y los números de línea de la pantalla. La salida de grep que se verá algo como:

/path/to/result/file.name:100: Line in file where 'searchstring' is found.

Siguiente tubería que ese resultado al comando de corte usando dos puntos ":" como nuestro delimitador de campo y los campos que muestran 1 a 2.

Cuando no necesito los números de línea que a menudo uso -f1 (solo el nombre de archivo y la ruta). Entonces tubería a UniQ de manera que sólo veo cada nombre de archivo, una vez así:

grep -ir searchstring * | cut -d":" -f1 | uniq

+0

Siento que este responde la pregunta original. Nombres de archivos y números de línea solamente. – mastaBlasta

+1

Tenga en cuenta que esto no funciona si tiene nombres de ruta absolutos de Windows como 'C: \ Users \ me \ git \' ya que contiene un punto y coma. – hirse

4

me gusta usar:

grep -niro 'searchstring' <path>

Pero eso es sólo porque siempre me olvido de las otras maneras y yo no puede olvidarse Robert de grep - niro por alguna razón :)

+2

Recién realizado para los franceses, un '-noir' también funciona;) –

Cuestiones relacionadas