Numerar las líneas que contienen un patrón con grep
Por defecto, cuando hacemos una búsqueda con grep, nos devuelve las líneas que contienen un determinado patrón, pero no nos indica el número de las líneas.
Por ejemplo, si buscamos las líneas que contienen «en» en Un soneto me manda hacer Violante, nos devuelve las línas, pero no la posición de esas líneas dentro del fichero:
$ grep en violante.txt que en mi vida me he visto en tanto aprieto; catorce versos dicen que es soneto; Yo pensé que no hallara consonante, mas si me veo en el primer terceto, no hay cosa en los cuartetos que me espante. Por el primer terceto voy entrando, y parece que entré con pie derecho, Ya estoy en el segundo, y aun sospecho
Si queremos saber el número de línea dentro del fichero que contiene ese patrón, podemos hacerlo con el modificador -n:
$ grep -n en violante.txt 2:que en mi vida me he visto en tanto aprieto; 3:catorce versos dicen que es soneto; 6:Yo pensé que no hallara consonante, 8:mas si me veo en el primer terceto, 9:no hay cosa en los cuartetos que me espante. 11:Por el primer terceto voy entrando, 12:y parece que entré con pie derecho, 15:Ya estoy en el segundo, y aun sospecho
Que nos devuelve el número de línea y la línea en cuestión. Para saber sólo el número de línea, podemos filtrar esta salida con el comando cut:
$ grep -n en violante.txt | cut -d ":" -f 1 2 3 6 8 9 11 12 15
Donde le indicamos que queremos el campo 1 (-f 1) siendo el delimitador de campo los dos puntos (-d «:»).