Я использую gradle run
для запуска сервера REST. Вывод сервера REST выглядит следующим образом:
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
здесь IP-адрес, случайный текст сообщения об ошибках. К сожалению, весь вывод направлен на стандартный вывод.
Как я могу направить все строки, начиная с IP-адреса, в файл, который называется, err.log
и в любую другую строку all.log
?
К сожалению, gradle run
может быть запущен только один раз и не останавливается, поскольку это REST-сервер.
Может использовать tee
, grep
сочетание?
источник
err.log
пусто, и весь вывод перенаправлен наall.log
использованиеtee
команды выше.err.log
существует, то команда выполнялась, но ничего не вышло.grep -E
с выражением, используемым в команде awk, должно совпадать или здесь.all.log
в выражении grep не было совпавших строк?all.log
иerr.log
со старой командой. Извините за путаницу. Спасибо, ты классный :)) !!Так, похоже ,
gradle run
не соответствуетtee
,pee
,grep
и Ио-перенаправление. Он всегда перестает читать после 4096 байт.Чтобы обойти эту проблему, я в
read
каждой строкеgradle run
. Я еще не тестировал, но думаю, что чтение строки длиной более 4 тыс. Символов также не удастся.Во всяком случае, вот код для решения моего вопроса конкретно:
источник
read -r line
иprintf '%s\n' "$line"
избегать некоторых крайних случаев, ломающих вещи.