¿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?

Londres
fuente

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
dogbane
fuente
¿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.

Andy Lester
fuente
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
jhenninger
fuente
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
Zsolt Botykai
fuente
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"
ghostdog74
fuente
3

o en perl (para completar ...):

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

Consulte este enlace para el comando linux linux http://linuxcommand.org/man_pages/grep1.html

para mostrar la línea no, la línea de código y el archivo, use este comando en su terminal o cmd, GitBash (Desarrollado por terminal)

grep -irn "YourStringToBeSearch"
Vrushal Raut
fuente
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

Abe honesto
fuente