varias usos uso usar regulares para palabras palabra expresiones exacta ejemplos ejemplo egrep comando columnas buscar grep

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 ''^[^:]+''