Как добавить разделители сообщений в stream UDP, по которому работает конвейер?

Я использую socat для перехвата UDP-сообщений и отправки их в именованный канал:

socat UDP-LISTEN:9999,fork PIPE:/tmp/mypipe,append

Я могу подключиться к этой трубе и посмотреть все полученные сообщения.

Я хотел бы направить вывод tail -f /tmp/mypipe в sed чтобы выполнить некоторую постобработку сообщений, но, к сожалению, некоторые из них не заканчиваются символом новой строки. Это проблема, потому что это означает, что несколько разных UDP-сообщений могут находиться в одной строке, а также потому, что tail -f /tmp/mypipe | sed ... tail -f /tmp/mypipe | sed ... не проходит последнюю строку, если она не определена.

В идеале я хотел бы иметь возможность добавлять пользовательский разделитель сообщений по мере их отправки в мой канал, чтобы я мог легко найти границы сообщений. Если это невозможно, то есть ли какой-нибудь способ, которым я могу следовать этому файлу и передать последнюю (потенциально неопределенную) строку в другую программу для последующей обработки?

    Одна возможность, которая не связана с разветвлением, – это использовать подробный вывод socat а не данные. Моя версия socat -v включает длину данных в подробный вывод, так что вы знаете, где она заканчивается. Например,

     mkfifo mypipe while sleep 3 do printf "%sNONEWLINE" $RANDOM done | socat -u - UDP4:localhost:9999 & socat -u -v UDP-RECV:9999 - >/dev/null 2>mypipe & cat -uv mypipe 

    будет выводить перед каждым элементом данных (например, 9430NONEWLINE ) заголовок, начинающийся > с даты и длины.

     > 2018/07/28 10:29:33.965222 length=13 from=0 to=12 9430NONEWLINE> 2018/07/28 10:29:36.968335 length=14 from=13 to=26 26947NONEWLINE> 2018/07/28 10:29:39.971025 length=14 from=27 to=40 15126NONEWLINE