2009-11-19 8 views
5

Al ver un archivo de registro cada vez mayor con, por ejemplo, "less -iS + F service.log" Quiero para limitar la pantalla a líneas que coincidan con un patrón determinado.función de filtro para menos + F

he intentado algo así como

less +F service.log | grep <pattern> | less +F 

que no funciona. También

cat < service.log | grep <pattern> | less +F 

no hace lo que yo quiero. Parece que la entrada ya está cerrada y menos no muestra cambios.

¿Cómo puedo limitar la visualización de líneas que coincidan con un patrón determinado?

Respuesta

0
tail -f service.log | grep <pattern> 
+0

Gracias para reflexionar sobre mi pregunta, sin embargo esto no es exactamente lo que quiero. Quiero tener funcionalidad "menos", es decir, el desplazamiento, la búsqueda, hightlighting dentro de la salida resultante. Algo así como "tail -f service.log | grep | less + F", que desafortunadamente no lo hace. – axelrose

0

La solución parecía simplemente

LESSOPEN='|grep <pattern> %s' less +F service.log 

pero menos no continúa para leer nuevas líneas del archivo de registro cada vez mayor.

1

Si no te importa el desove y derribar un par de procesos cada línea, utilice un bucle de lectura, mientras que

tail -f filename.log|while read line; do echo $line | grep pattern; done 
1

que aún no han trabajado la manera de hacer esto sin un archivo temporal, pero Aquí hay una secuencia de comandos que muestra un grep funcional -filtrado less +F (que limpia su archivo temporal). Lo llamo lessf.

Uno de los elementos clave es el argumento --line-buffered a greptail que permite la salida a continuar fluyendo a través de la tubería (unbuffer el comando proporcionado por expect proporciona una funcionalidad similar para cualquier programa).

#!/bin/sh 
LOGFILE=$1 
shift 
[email protected] 
TEMP_DIR=/tmp/lesstmp 
TEMP_FILE="$TEMP_DIR/$(basename $LOGFILE)" 
[ ! -d $TEMP_DIR ] && mkdir $TEMP_DIR 
trap 'rm -rf "$TEMP_DIR"; exit' INT TERM EXIT 
(tail -f "$LOGFILE" | grep --line-buffered $PATTERN) > "$TEMP_FILE" | less +F "$TEMP_FILE" 
trap - INT TERM EXIT 

Ejemplo de uso:

lessf /var/log/system.log foobar

lessf /var/log/system.log -v nobar

Cuestiones relacionadas