J'utilise gradle run
pour démarrer un serveur REST. La sortie du serveur REST ressemble à ceci:
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
voici une adresse IP, randomtext sont des messages d'erreur. Malheureusement, toutes les sorties sont dirigées vers la sortie standard.
Comment puis-je diriger toutes les lignes commençant par une adresse IP vers un fichier appelé err.log
et toutes les autres lignes vers all.log
?
Malheureusement, gradle run
ne peut être démarré qu'une seule fois et ne s'arrête pas, car il s'agit d'un serveur REST.
Peut - être utiliser une tee
, grep
combinaison?
la source
err.log
est vide et toutes les sorties sont redirigées versall.log
latee
commande ci-dessus.err.log
existe, alors la commande s'est exécutée mais rien n'est sorti.grep -E
avec l'expression utilisée dans la commande awk doit correspondre, ou c'est le cas ici.all.log
ne contienne pas les lignes correspondantes dans l'expression grep?all.log
eterr.log
avec une ancienne commande. Désolé pour la confusion. Merci, tu es génial :)) !!Ainsi , il semble que
gradle run
ne respecte pastee
,pee
,grep
et io-redirection. Il arrête toujours la lecture après 4096 octets.Pour contourner ce problème, j'ai
read
chaque ligne degradle run
. Je ne l'ai pas encore testé, mais je suppose que la lecture d'une ligne de plus de 4 000 caractères échouera également.Quoi qu'il en soit, voici le code pour résoudre ma question en particulier:
la source
read -r line
etprintf '%s\n' "$line"
pour éviter que certains cas de bord ne cassent les choses.