Estoy usando gradle run
para iniciar un servidor REST. La salida del servidor REST se ve así:
XXX.XXX.XX.XXX - <moreinfo>
randomtext
randomtext
XXX.XXX.XX.XXX - <moreinfo>
XXX.XXX.XX.XXX - <moreinfo>
randomtext
XXX.XXX.XX.XXX - <moreinfo>
XXX.XXX.XX.XXX
Aquí hay una dirección IP, el texto aleatorio son mensajes de error. Toda la salida se dirige a stdout, lamentablemente.
¿Cómo puedo dirigir todas las líneas que comienzan con una dirección IP a un archivo llamado err.log
y todas las demás líneas all.log
?
Desafortunadamente, gradle run
solo se puede iniciar una vez y no se detiene, ya que es un servidor REST.
Tal vez utilizar una tee
, grep
combinación?
fuente
err.log
está vacío y toda la salida se redirige alall.log
uso deltee
comando anterior.err.log
existe, el comando se ejecutó pero no salió nada.grep -E
con la expresión utilizada en el comando awk debería coincidir, o lo hace aquí.all.log
no contenga las líneas coincidentes en la expresión grep?all.log
yerr.log
con un viejo comando. Perdón por la confusion. Gracias, eres increíble :)) !!Por lo tanto, parece que
gradle run
no cumpla contee
,pee
,grep
y io-redirección. Siempre deja de leer después de 4096 bytes.Para evitar este problema,
read
cada línea degradle run
. Todavía no lo probé, pero supongo que la lectura de una línea de más de 4k caracteres también fallará.De todos modos, aquí está el código para resolver mi pregunta específicamente:
fuente
read -r line
yprintf '%s\n' "$line"
para evitar algunos bordes casos rompiendo cosas.