¿Cómo puedo formatear mi salida grep para mostrar los números de línea al final de la línea y también el recuento de visitas?


378

Estoy usando grep para hacer coincidir la cadena en un archivo. Aquí hay un archivo de ejemplo:

example one,
example two null,
example three,
example four null,

grep -i null myfile.txt devoluciones

example two null,
example four null,

¿Cómo puedo devolver líneas coincidentes junto con sus números de línea de esta manera:

  example two null, - Line number : 2
  example four null, - Line number : 4
  Total null count : 2

Sé que -c devuelve líneas coincidentes totales, pero no sé cómo formatearlo correctamente para agregar total null countal frente, y no sé cómo agregar los números de línea.

¿Que puedo hacer?

Respuestas:


600

-n devuelve el número de línea.

-ies para ignorar el caso. Solo para usarse si no es necesaria la coincidencia de mayúsculas

$ grep -in null myfile.txt

2:example two null,
4:example four null,

Combine con awkpara imprimir el número de línea después del partido:

$ grep -in null myfile.txt | awk -F: '{print $2" - Line number : "$1}'

example two null, - Line number : 2
example four null, - Line number : 4

Utilice la sustitución de comandos para imprimir el recuento nulo total:

$ echo "Total null count :" $(grep -ic null myfile.txt)

Total null count : 2

¿puedo formatear esto agregando números de línea después en lugar de antes con:?
Londres

su solución parece estar bien pero aparece un errorawk95: syntax error at source line context is >>> ' <<< missing } awk95: bailing out at source line 1
Londres

lo siento cambió a Linux ahora funciona :) era la versión de Windows no tan buena
Londres

1
... los caballeros que dicen -nique así es como recuerdas este truco
santiago arizti

59

Use -no --line-number.

Echa un vistazo a man grepmuchas más opciones.


3
El nuevo usuario de Linux es perezoso para leer la página de manual. Pero si usan linux lo suficiente, estarán acostumbrados :) Es muy útil :)
Dzung Nguyen

19
No siempre es vago, (pero a veces), a menudo es que un nuevo usuario de Linux tiene problemas para comprender una página de manual. (Pueden parecer crípticos)
TecBrat

a veces la página man puede tomar muchas páginas. Y es difícil leerlos todos
Eugen Konkov,

7

use grep -n -i null myfile.txtpara mostrar el número de línea delante de cada coincidencia.

No creo que grep tenga un interruptor para imprimir el recuento del total de líneas coincidentes, pero solo puede canalizar la salida de grep en wc para lograr eso:

grep -n -i null myfile.txt | wc -l

3
-c imprimirá el total de líneas coincidentes
dpatchery

Tienes razón. Desafortunadamente, también suprime la salida normal.
jhenninger

7

O use awken su lugar:

awk '/null/ { counter++; printf("%s%s%i\n",$0, " - Line number: ", NR)} END {print "Total null count: " counter}' file

4

grepencuentra las líneas y genera los números de línea, pero no te permite "programar" otras cosas. Si desea incluir texto arbitrario y hacer otra "programación", puede usar awk,

$ awk '/null/{c++;print $0," - Line number: "NR}END{print "Total null count: "c}' file
example two null,  - Line number: 2
example four null,  - Line number: 4
Total null count: 2

O solo usando el shell (bash / ksh)

c=0
while read -r line
do
  case "$line" in
   *null* )  (
    ((c++))
    echo "$line - Line number $c"
    ;;
  esac
done < "file"
echo "total count: $c"

3

o en perl (para completar ...):

perl -npe 'chomp; /null/ and print "$_ - Line number : $.\n" and $i++;$_="";END{print "Total null count : $i\n"}'


1

Solo pensé en algo que podría ayudarte en el futuro. Para buscar múltiples cadenas y números de línea de salida y navegar a través de la salida, escriba:

egrep -ne 'null|three'

Mostrará:

2:example two null,  
3:example three,  
4:example four null,   

egrep -ne 'null|three' | less

mostrará la salida en una sesión menos

HTH Jun

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.