Этот обрабатывает встроенные разделители строк:
$ cat /tmp/bla
"PRCD-15234","CDOC","12","JUN-20-2016 17:00:00","title, with commas, ","Y!##!"
"PRCD-99999","CDOC","1","Sep-26-2016 17:00:00","title without comma","Y!##!"
"PRCD-99999","CDOC","1","Sep-26-2016 17:00:00","embedded\",delimiters\",","Y!##!"
sed -E 's / "(([^"] * (\\ ")?) *) ", / \ 1 | / g; s /" | (([^ "] * (\\")?) *) "/ \ 1 / g '
→
PRCD-15234|CDOC|12|JUN-20-2016 17:00:00|title, with commas, |Y!##!
PRCD-99999|CDOC|1|Sep-26-2016 17:00:00|title without comma|Y!##!
PRCD-99999|CDOC|1|Sep-26-2016 17:00:00|embedded\",delimiters\",|Y!##!
Выяснил это из помощи на github'е Docker'а. Я не упомянул, что пытался запустить скрипт python в контейнере, но я не думал, что это важно.
На самом деле это была не проблема Docker, а проблема python. Я узнал, что Docker уже предоставляет stdout в реальном времени. Python держал весь stdout в своем буфере и не выводил его до завершения сценария. За исключением случаев, когда код запускался в терминале с -t
.
В команде docker мне нужно было только вызвать скрипт с python -u
, чтобы предотвратить буферизацию stdout в python.
Ну, почему бы вам не использовать стек ELK с logspout вы можете получать журналы в реальном времени из всех контейнеров докеров, а также выполнять поиск среди журналов и множество других интересных вещей