Оказывается, в Ubuntu есть эта ошибка, и ее можно исправить:
gsettings set org.gnome.Vino require-encryption false
Предполагая, что у вас есть доступ к GNU sed
, который может выполнять небуферизованный вывод:
tail -f file | sed -u 's/^[^{]*//' | jq.
Это запустит tail -f
для вашего файла и будет непрерывно отправлять новые данные на sed
. Команда sed
удалит все до пробела перед первым {
в строке, а затем отправит результат на jq
.
Опция -u
для GNU sed
запрещает буферизацию вывода. Без этой опции sed
буферизует результат и отправляет данные на jq
только после того, как буфер (4 КБ? )был полон. Выполнение такой буферизации является стандартной процедурой, когда вывод инструмента не является самим терминалом, и это делается из соображений эффективности. В этом случае мы можем захотеть отключить буферизацию, поэтому мы используем -u
.
Чтобы выбрать только те строки, которые содержат строку DEBUG
перед данными JSON:
tail -f file | sed -u -e '/^[^{]*DEBUG /!d' -e 's///' | jq.
или
tail -f file | sed -u -n 's/^[^{]*DEBUG //p' | jq.
Команда sed
здесь удалит все строки, которые не начинаются с некоторого текста, не содержащего {
символов, заканчивающихся на DEBUG
. Если такая строка найдена, соответствующий текст удаляется, оставляя данные JSON.
Обратите внимание, что здесь мы извлекаем JSON на основе строки DEBUG
, а не {
, которая инициирует объект JSON.
Относится к буферизации в конвейерах:
Удаление первых двух столбцов, разделенных пробелом:
tail -f file | stdbuf -oL cut -d ' ' -f3- | jq.
(stdbuf -oL
, как и в системах GNU или FreeBSD, трюки cut
заставляют выполнять буферизацию вывода на основе строк -, а не на основе блоков -).