Obtenga el número de línea mientras usa grep

360

Estoy usando grep recursive para buscar archivos para una cadena, y todos los archivos coincidentes y las líneas que contienen esa cadena se imprimen en el terminal. Pero, ¿es posible obtener también los números de línea de esas líneas?

Ej: actualmente lo que obtengo es /var/www/file.php: $options = "this.target", pero lo que intento obtener es /var/www/file.php: 1142 $options = "this.target";, bueno, ¿dónde 1142estaría el número de línea que contiene esa cadena?

La sintaxis que estoy usando para grep recursivamente es sudo grep -r 'pattern' '/var/www/file.php'

Una pregunta más es, ¿cómo obtenemos resultados que no sean iguales a un patrón? ¿Te gustan todos los archivos pero no los que tienen una cadena determinada?

sai
fuente
El indicador -v mostrará líneas que no coinciden (grep -v myText MyFile.txt)
bcarroll el

Respuestas:

546
grep -n SEARCHTERM file1 file2 ...
Miro A.
fuente
Tenía otra pregunta rápida, ¿cómo obtenemos resultados que no sean iguales a un patrón? ¿Te gustan todos los archivos pero no los que tienen una cadena determinada?
sai
55
eso sería la línea de comando switch -v. Si ejecuta 'grep --help', se mostrarán todas las opciones
Miro A.
56
No es necesario -rsi especifica varios archivos. Solo necesita -rsi especifica directorios.
Sparhawk
@JeanPaul: veo el mismo resultado para ambos -nr y -n -r. ¿Qué versión de grep estás usando? $ grep -n -r nombre * | wc -l 1984 $ grep -nr nombre * | wc -l 1984 $ grep -V grep (BSD grep) 2.5.1-FreeBSD
Miro A.
Código solo respuesta, sin explicación. : S
Florian Castelain
148

Los números de línea se imprimen con grep -n:

grep -n pattern file.txt

Para obtener solo el número de línea (sin la línea correspondiente), se puede usar cut:

grep -n pattern file.txt | cut -d : -f 1

Las líneas que no contienen un patrón se imprimen con grep -v:

grep -v pattern file.txt
carlito
fuente
3
Y el último número de línea coincidente: grep -n pattern file.txt | cut -d : -f 1 | tail -1(puede guardar esto en una variable y usarlo, por ejemplo, para crear un archivo de cola)
Nux
Y para eliminar el número / dos puntos al comienzo de cada cadena puede usar algo como:grep -n pattern file.txt | sed 's/^[0-9][0-9]*://'
leetbacoon
24

Si solo desea el número de línea, haga esto:

grep -nr Pattern file.ext | gawk '{print $1}' FS=":"

Ejemplo:

$ grep -nr 9780545460262 EXT20130410.txt | gawk '{print $1}' FS=":" 
48793
52285
54023
Caídas de nubes
fuente
1
awk -F: '{print $1}'También funciona y que no es necesario -ren grepcuando se utiliza en archivos (sólo directorios se pueden buscar de forma recursiva)
Stuart Cardall
7
grep -A20 -B20 pattern file.txt

Buscar patrón y mostrar 20 líneas después y antes del patrón

emilio
fuente
11
Esto no es en absoluto lo que se pidió.
Jonathon Reinhart
3
Además, -C20es una versión más corta si eso es lo que se quería
Marty Neal
0

directorio grep -nr "cadena de búsqueda"

Esto le da la línea con el número de línea.

chico al azar
fuente
0

Para mostrar los resultados con los números de línea, puede intentar esto

grep -nr "word to search for" /path/to/file/file 

El resultado debería ser algo como esto:

linenumber: other data "word to search for" other data
Fouad Djebbar
fuente