Конец файла и удаление даты и времени

Оказывается, в Ubuntu есть эта ошибка, и ее можно исправить:

gsettings set org.gnome.Vino require-encryption false
1
19.06.2021, 20:56
2 ответа

Предполагая, что у вас есть доступ к 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.

Относится к буферизации в конвейерах:

7
28.07.2021, 11:23

Удаление первых двух столбцов, разделенных пробелом:

tail -f file | stdbuf -oL cut -d ' ' -f3- | jq.

(stdbuf -oL, как и в системах GNU или FreeBSD, трюки cutзаставляют выполнять буферизацию вывода на основе строк -, а не на основе блоков -).

6
28.07.2021, 11:23

Теги

Похожие вопросы