usos - Use grep para informar solo números de línea
grep-v ejemplo (8)
Tengo un archivo que posiblemente contiene un formato incorrecto (en este caso, la aparición del patrón //backslash
). Me gustaría utilizar 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íjalo).
Sin embargo, no parece haber una manera de imprimir el número de línea ( grep -n
) y no la coincidencia o 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í mismo. grep -no
viene más cerca, creo, pero aún muestra la coincidencia.
Para contar el número de líneas que coinciden con el patrón:
grep -n "Pattern" in_file.ext | wc -l
Para extraer el patrón combinado
sed -n ''/pattern/p'' file.est
Para mostrar los números de línea en qué patrón se combinó
grep -n "pattern" file.ext | cut -f1 -d:
Querrá el segundo campo después de los dos puntos, no el primero.
grep -n "text to find" file.txt | cut -f2 -d:
Recomiendo las respuestas con sed
y awk
solo por obtener el número de línea, en lugar de usar grep
para obtener toda la línea coincidente y luego eliminarla de la salida con cut
u otra herramienta. Para completar, también puedes usar Perl:
perl -nE ''/pattern/ && say $.'' filename
o Ruby:
ruby -ne ''puts $. if /pattern/'' filename
Si estás abierto a usar AWK:
awk ''/textstring/ {print FNR}'' textfile
En este caso, FNR es el número de línea. AWK es una gran herramienta cuando buscas en grep | cut, o en cualquier momento que estés buscando tomar salida grep y manipularla.
Todas estas respuestas requieren grep para generar todas las líneas coincidentes, luego canalizarlo 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:
sed -n ''/pattern/='' filename
Versión Bash
lineno=$(grep -n "pattern" filename)
lineno=${lineno%%:*}
prueba esto:
grep -n "text to find" file.ext |cut -f1 -d:
usando solo grep :
grep -n "text to find" file.ext | grep -Po ''^[^:]+''