Tengo un archivo que posiblemente contenga un formato incorrecto (en este caso, la aparición del patrón \\backslash
). Me gustaría usar grep
para devolver solo los números de línea donde ocurre esto (como en, la coincidencia estaba aquí, vaya a la línea # x y corríjala).
Sin embargo, no parece haber una forma de imprimir el número de línea ( grep -n
) y no la coincidencia o la línea en sí.
Puedo usar otra expresión regular para extraer los números de línea, pero quiero asegurarme de que grep no pueda hacerlo por sí solo. grep -no
se acerca más, creo, pero aún muestra la coincidencia.
grep -no
:! ¡Esto hizo lo que vine a intentar y hacer! (es decir, no imprimir la línea que a veces es muy larga en, por ejemplo, archivos fuente de JavaScript minificados).Respuestas:
tratar:
fuente
-f
param. Para mí lo fue-f2
. (Sepa que esto es algo viejo, pero creo que podría ayudar a algunas pobres almas)grep -n "text to find" file.ext | cut -f1,2 -d:
muestra el nombre del archivo y el número de línea.-H
para forzar que muestre el nombre del archivo cuando solo hay un archivo. Por el contrario, siempre puede usar-h
para decirle que no muestre el nombre del archivo sin importar cuántos archivos esté grepping.Si está dispuesto a usar AWK:
En este caso, FNR es el número de línea. AWK es una gran herramienta cuando está buscando grep | cut, o en cualquier momento que esté buscando tomar la salida grep y manipularla.
fuente
NR
también funciona cuando solo se está examinando un archivo, como en este caso.Todas estas respuestas requieren grep para generar todas las líneas coincidentes y luego canalizarlas a otro programa. Si sus líneas son muy largas, podría ser más eficiente usar solo sed para generar los números de línea:
fuente
Versión Bash
fuente
Recomiendo las respuestas con
sed
yawk
solo para obtener el número de línea, en lugar de usargrep
para obtener toda la línea coincidente y luego eliminarla de la salida concut
u otra herramienta. Para completar, también puede usar Perl:o Ruby:
fuente
Querrá el segundo campo después de los dos puntos, no el primero.
grep -n "text to find" file.txt | cut -f2 -d:
fuente
Para contar el número de líneas que coinciden con el patrón:
Para extraer un patrón coincidente
Para mostrar los números de línea en los que se hizo coincidir el patrón
fuente
usando solo grep :
grep -n "text to find" file.ext | grep -Po '^[^:]+'
fuente