Registros de análisis en sed eficientemente -- parsing campo con regex campo con bash campo con shell campo con sed camp codereview Relacionados El problema

Parsing logs in sed efficiently


2
vote

problema

Español

Tengo una aplicación que el archivo de registro tiene la mayoría de las líneas que comienzan con una hora / fecha, seguido de un nivel de depuración y el mensaje de registro real. A menudo, quiero ver la salida en vivo y los colores hacen que sea mucho mejor legible. Esto es lo que uso en este momento para tuberías los registros:

  while read line; do echo "$line" | sed -e "s,^.* DEBUG,$(tput setaf 2)&$(tput sgr0),"      -e "s,^.* INFO,$(tput setaf 2)&$(tput sgr0),"      -e "s,^.* WARN,$(tput setaf 3)&$(tput sgr0),"      -e "s,^.* ERROR,$(tput setaf 1)&$(tput sgr0),"      -e "s,^.* SEVERE,$(tput setaf 1)$(tput bold)&$(tput sgr0)," done   

La llamada en la línea de comandos se ve así:

  tail -fn 200 /path/server.log | ./logparser   

Todo esto funciona como se esperaba, pero cuando se imprimen muchas líneas a la vez que el analizador se queda atrás. Creo que esto es porque ejecuto SED una vez por cada línea. ¿Hay una solución mejor?

Original en ingles

I have an application which log file has most lines start with a time/date, followed by a debugging level and the actual log message. Often I want to watch the output live and colors make it a lot better readable. This is what I use at the moment for piping the logs:

while read line; do echo "$line" | sed -e "s,^.* DEBUG,$(tput setaf 2)&$(tput sgr0)," \     -e "s,^.* INFO,$(tput setaf 2)&$(tput sgr0)," \     -e "s,^.* WARN,$(tput setaf 3)&$(tput sgr0)," \     -e "s,^.* ERROR,$(tput setaf 1)&$(tput sgr0)," \     -e "s,^.* SEVERE,$(tput setaf 1)$(tput bold)&$(tput sgr0)," done 

The call on the command line looks like this:

tail -fn 200 /path/server.log | ./logparser 

This all works as expected but when many lines are printed at once the parser lags behind. I think this is because I run sed once for every single line. Is there a better solution?

              
       
       

Lista de respuestas

1
 
vote

Gracias a su bulto, esto funciona mucho más rápido:

  var item = result.SingleOrDefault(e => e == "Order"); if (item != null) {     baseTypes.Add(item); } item = result.SingleOrDefault(e => e == "Motion"); 2  

NOTA: Los dos primeros y la última línea se eliminan.

Dado que SED toma el stdin, esto básicamente comienza una instancia de SED para una corriente completa en contraste con una por línea.

 

Thanks to itsbruce this runs much faster:

sed -e "s,^.* DEBUG,$(tput setaf 2)&$(tput sgr0)," \     -e "s,^.* INFO,$(tput setaf 2)&$(tput sgr0)," \     -e "s,^.* WARN,$(tput setaf 3)&$(tput sgr0)," \     -e "s,^.* ERROR,$(tput setaf 1)&$(tput sgr0)," \     -e "s,^.* SEVERE,$(tput setaf 1)$(tput bold)&$(tput sgr0)," 

Note: first two and the last line are removed.

Since sed takes the STDIN, this basically starts one sed instance for whole stream in contrast to one per line.

 
 

Relacionados problema

3  Habilitar o deshabilitar secciones de un modelo de acuerdo con la entrada del usuario  ( Enable or disable sections of a model according to user input ) 
Estoy usando el comando SED para comentar dentro o fuera de las secciones en mi modelo de acuerdo con la entrada del usuario (comentar se realiza al prefijars...

3  Script de bash para administrar notas de hashtag  ( Bash script for managing hashtag notes ) 
He escrito un script simple para administrar las notas de Hashtag. No estoy familiarizado con la scriptación de bash, así que realmente lo apreciaría si alg...

3  Acelerar el conjunto de comandos SED en archivos (recursivamente en el directorio completo)  ( Accelerate set of sed commands in files recursively over full directory ) 
ejecuto esto para solucionar algunas referencias codificadas por duros, reemplazando las ocurrencias de Folder.py3 por Folder.py4 : Folder.py5 Sin em...

4  Transponer una matriz usando sed  ( Transpose a matrix using sed ) 
Estoy tratando de transponer los siguientes datos de: template <class T> using Container = std::vector< std::shared_ptr<T> >; template <class T> Container...

4  Bash Shell Script utiliza SED para crear e insertar varias líneas después de una línea en particular en un archivo existente  ( Bash shell script uses sed to create and insert multiple lines after a particula ) 
Este código parece funcionar, pero me gustaría que alguien con Shell-Fu lo revisara. es el archivo temporal una buena idea? ¿Cómo lo haría sin? es la her...

0  Cargando un archivo en VIM a través de la salida de tubos de AG  ( Loading a file in vim via piped output of ag ) 
Me siento como si mi escenario fuera bastante simple, pero que podría sobrecomplicarlo. Estoy buscando a través de archivos en busca de una condición especi...

4  Usando la expresión regular de SED para extraer el nombre de dominio del archivo  ( Using sed regular expression to extract domain name from file ) 
Estoy aprendiendo regex con sed Para extraer el último campo del archivo llamado "Prueba". El método que estoy intentando da la salida deseada. Por favor, s...

4  Find-grep-sed para la búsqueda de proyectos y reemplazar  ( Find grep sed for project wide search replace ) 
Siempre olvido cómo hacer esto de manera eficiente con el Arglista de VIM. Inspiración de dibujo en una publicación en Desbordamiento de la pila , escribí un...

2  Añadiendo un cero a los nombres de archivos  ( Adding a zero to file names ) 
He descubierto recientemente el poder del SED; Las expresiones regulares parecen que se llevarán toda la vida para dominar. Este pequeño script utiliza ambos ...

4  Retire cada línea que incluya y siga la segunda ocurrencia de un patrón dado  ( Remove every line that include and follows the second occurrence of a given patt ) 
De un archivo, estoy tratando de eliminar cada línea que incluya y siga la segunda ocurrencia de un patrón dado en Bash (Mac OSX). Tenga en cuenta que un arch...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos