Estou usando gradle run
para iniciar um servidor REST. A saída do servidor REST é semelhante a esta:
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
aqui está um endereço IP, texto aleatório são mensagens de erro. Toda saída é direcionada para stdout, infelizmente.
Como direcionar todas as linhas que começam com um endereço IP para um arquivo chamado err.log
e todas as outras linhas para all.log
?
Infelizmente, gradle run
só pode ser iniciado uma vez e não para, pois é um servidor REST.
Talvez usar uma tee
, grep
combinação?
fonte
err.log
está vazio e toda a saída é redirecionada para oall.log
uso dotee
comando acima.err.log
existir, o comando foi executado, mas nada saiu.grep -E
com a expressão usada no comando awk deve corresponder, ou aqui.all.log
não contenha as linhas correspondentes na expressão grep?all.log
eerr.log
com um comando antigo. Desculpe pela confusão. Obrigado, você é incrível :)) !!Assim, parece que
gradle run
não cumpratee
,pee
,grep
e io-redirecionamento. Ele sempre para de ler após 4096 bytes.Para contornar esse problema, eu
read
cada linha degradle run
. Ainda não testei, mas acho que a leitura de uma linha com mais de 4k caracteres também falhará.De qualquer forma, aqui está o código para resolver minha pergunta especificamente:
fonte
read -r line
eprintf '%s\n' "$line"
para evitar alguns ponta casos quebrando coisas.