#linux #shell #sed
Отслеживаю логи через tailf (tail -f). Для удобства отображения хотелось бы после каждой строки добавлять пустую строку. Например: $ tailf /var/log/some.log log1 log2 log3 $ tailf /var/log/some.log | magic log1 log2 log3 Пробовал через sed двумя способами, но получаю то же без изменений. Идея в том, чтобы поматчить перенос строки и заменить его на два переноса. Общий синтаксис такой: sed 's/substitute_this/to_this/g' Способ 1: вставить перенос строки как $'\n'. $ tailf /var/log/some.log | sed "s/$'\n'/test/g" log1 log2 log3 Похоже, что $'\n' не матчится на переносы строк в моем логе. Способ 2: вставить перенос строку как перенос строки при вводе команды: $ tailf /var/log/some.log | sed "s/ > /test/g" sed: -e expression #1, char 2: unterminated `s' command $ tailf /var/log/some.log | sed "s/\ /test/g" sed: -e expression #1, char 0: no previous regular expression Если бы это был shell-скрипт, можно было бы использовать хак: newline=' ' Но я-то хочу "на ходу" использовать. Сделать фукцию или alias тоже не подойдёт, т.к. я работаю с большим количеством хостов и не имею возможности индивидуально настраивать .bashrc. Собственно, вопрос: что должно быть на месте magic?
Ответы
Ответ 1
Еще вариант с sed: tailf foo.log init.lxc 1455930731.917 ERROR lxc_initutils - initutils.c:mount_fs:36 - failed to mount /proc : Device or resource busy init.lxc 1455930758.674 ERROR lxc_initutils - initutils.c:mount_fs:36 - failed to mount /proc : Device or resource busy init.lxc 1455986152.381 ERROR lxc_initutils - initutils.c:mount_fs:36 - failed to mount /proc : Device or resource busy init.lxc 1455986234.349 ERROR lxc_initutils - initutils.c:mount_fs:36 - failed to mount /proc : Device or resource busy tailf foo.log | sed 'a\ ' init.lxc 1455930731.917 ERROR lxc_initutils - initutils.c:mount_fs:36 - failed to mount /proc : Device or resource busy init.lxc 1455930758.674 ERROR lxc_initutils - initutils.c:mount_fs:36 - failed to mount /proc : Device or resource busy init.lxc 1455986152.381 ERROR lxc_initutils - initutils.c:mount_fs:36 - failed to mount /proc : Device or resource busy init.lxc 1455986234.349 ERROR lxc_initutils - initutils.c:mount_fs:36 - failed to mount /proc : Device or resource busyОтвет 2
вам надо в конце строки (а sed работает именно построчно) вставлять символ перевода строки \n. якорем (метасимволом, квантификатором), обозначающим конец строки, в большинстве диалектов регулярных выражений обычно служит символ $: $ tail -f /var/log/some.log | sed 's/$/\n/' для изоляции от «вмешательства» оболочки программу для sed лучше заключать в одинарные кавычки (да, s/$/\n/ — это именно программа, интерпретируемая программой sed).
Комментариев нет:
Отправить комментарий