Есть еще один вопрос, который почти такой же, но ни одно из предложений из его ответа не работает для меня:пайпинг -f в awk
Я пытаюсь подключить -fa logfile, но хочу заменить \r на \n перед его отображением, чтобы терминал не перезаписывал сам себя, а вместо этого позволял мне прокручивать вывод.
это работает как подозревается:
tail -f -c 1000 "mycustom.log"
и это также:
tail -c 1000 "mycustom.log" | mawk 'gsub("\r","\n")'
ни один из этих трех, тем не менее, никогда ничего не печатал на моей консоли
tail -f -c 1000 "mycustom.log" | mawk 'gsub("\r","\n")'
stdbuf -o0 tail -f -c 1000 "mycustom.log" | mawk 'gsub("\r","\n")'
unbuffer tail -f -c 1000 "mycustom.log" | mawk 'gsub("\r","\n")'
Чтобы unbuffer
был известен моей системе, мне пришлось установить пакет expect-dev
использование awk
или mawk
, похоже, не имеет значения. Я также написал вариант sed
:
sed 's/\r/\n/g'
который ведет себя так же для меня.
Я также нашел этот вопрос:
https://stackoverflow.com/questions/15325548/how-to-use-tail-in-combination-with-sed
Но параметр sed -u для меня ничего не меняет, и конструкция $ '..' идентифицируется как синтаксическая ошибка моим sed
- изменение его на \$ '...' выполняется, но с использованием tail -f piping to он никогда не печатает ничего, как все, что я пробовал.
Могу ли я попробовать что-нибудь еще? Проблема в том, что я использую глобальную команду в sed / awk? Или, может быть, проблема в том, что исходный поток, созданный tail -f
представляет собой "одну строку", поскольку в нем нет \n? Есть ли способ, чтобы sed или awk обрабатывали куски меньше, чем строка за строкой?
Есть ли альтернатива для замены всех \r на \n, которые могут работать с tail -f
?