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?


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

Respuestas:


546
grep -n SEARCHTERM file1 file2 ...

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

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

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


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.