¿Cómo obtener el número de línea de grep?


18

El siguiente grep

grep -r -e -n coll *

mostrará

fullpath/filename:  <tag-name>coll</tag-name>

Me gustaría saber qué línea tiene el siguiente texto, intenté agregar -n, pero no funcionó. Intenté agregar | grep -n *, pero hizo algo extraño.

Lo que me gustaría ver (no me importa el formato) es

fullpath/filename:10:  <tag-name>coll</tag-name>

1
Veo números de línea cuando uso la -nopción. ¿Puedes publicar el resultado de lo que obtienes?
Kris Harper

Respuestas:


18

Debe poner -eal final de la lista de opciones:grep -rne coll *


15

no hay necesidad de -r & -e!

obtener el número de línea de un patrón!

grep -n "pattern" file.txt

si desea obtener solo el número de línea como salida, agregue otro comando grep.

grep -n "pattern" file.txt | grep -Eo '^[^:]+'

1
Para obtener solo el número de línea, es más fácil de usar cut, por ejemplocut -f1 -d:
wjandrea

1

Para grep un patrón en un archivo específico y obtener las líneas coincidentes:

grep -n <Pattern> <File> | awk -F: '{ print $1 }' | sort -u

o usando cutsegún lo sugerido por @wjandrea:

grep -n <Pattern> <File> | cut -f1 -d: | sort -u

dónde

  • <Pattern>es un patrón global citado (use la opción -Epara regexp);
  • <File> es el archivo que le interesa;
  • la primera tubería awk ...filtra los números de línea en la salida de grep (antes :en cada línea);
  • la segunda tubería asegura que los números de línea solo aparezcan una vez.

Para obtener solo el número de línea, es más fácil de usar cutque Awk, por ejemplocut -f1 -d:
wjandrea

@wjandrea ¿Más fácil de qué manera?
Sheljohn

Quiero decir, la sintaxis es más simple
wjandrea

@wjandrea Eso suena muy objetivo.
Sheljohn

@wjandrea Perdón por el sarcasmo, edité para incluir su sugerencia :)
Sheljohn el
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.