bash - varias - grep varios patrones
¿Cómo canaliza la entrada a través de grep a otra utilidad? (3)
Estoy usando ''tail -f'' para seguir un archivo de registro a medida que se actualiza; a continuación, canalizo la salida de grep para mostrar solo las líneas que contienen un término de búsqueda ("org.springframework" en este caso); Finalmente, me gustaría hacer que se canalice la salida de grep a un tercer comando, ''cortar'':
tail -f logfile | grep org.springframework | cut -c 25-
El comando de corte eliminaría los primeros 25 caracteres de cada línea para mí si pudiera obtener la entrada de grep. (Funciona como se espera si elimino ''grep'' de la cadena).
Estoy usando cygwin con bash.
Resultados reales: cuando agrego la segunda tubería para conectar con el comando ''cortar'', el resultado es que se cuelga, como si estuviera esperando una entrada (en caso de que se lo pregunte).
Asumiendo GNU grep, agregue --line-buffered
a su línea de comando, por ejemplo.
tail -f logfile | grep --line-buffered org.springframework | cut -c 25-
Editar:
Veo que el búfer grep no es el único problema aquí, ya que el corte no permite el búfer en línea.
es posible que desee intentar reemplazarlo con algo que pueda controlar, como sed:
tail -f logfile | sed -u -n -e ''/org/.springframework/ s//(./{0,25/}/).*$//1/p''
o awk
tail -f logfile | awk ''/org/.springframework/ {print substr($0, 0, 25);fflush("")}''
En mi sistema, alrededor de 8K fue almacenado en búfer antes de obtener cualquier salida. Esta secuencia funcionó para seguir el archivo inmediatamente:
tail -f logfile | while read line ; do echo "$line"| grep ''org.springframework''|cut -c 25- ; done
Lo que tienes debería funcionar bien, esa es toda la idea de las tuberías. El único problema que veo es que, en la versión de cut
que tengo (GNU coreutiles 6.10), debe usar el cut -c 25-
sintaxis cut -c 25-
(es decir, usar un signo menos en lugar de un signo más) para eliminar los primeros 24 caracteres.
También está buscando diferentes patrones en sus dos ejemplos, en caso de que sea relevante.