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 1142
estarí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?
Respuestas:
fuente
-r
si especifica varios archivos. Solo necesita-r
si especifica directorios.Los números de línea se imprimen con
grep -n
:Para obtener solo el número de línea (sin la línea correspondiente), se puede usar
cut
:Las líneas que no contienen un patrón se imprimen con
grep -v
:fuente
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)grep -n pattern file.txt | sed 's/^[0-9][0-9]*://'
Si solo desea el número de línea, haga esto:
Ejemplo:
fuente
awk -F: '{print $1}'
También funciona y que no es necesario-r
engrep
cuando se utiliza en archivos (sólo directorios se pueden buscar de forma recursiva)Buscar patrón y mostrar 20 líneas después y antes del patrón
fuente
-C20
es una versión más corta si eso es lo que se queríadirectorio grep -nr "cadena de búsqueda"
Esto le da la línea con el número de línea.
fuente
Para mostrar los resultados con los números de línea, puede intentar esto
El resultado debería ser algo como esto:
fuente