как перенаправить вывод команды sed в файл - PullRequest
0 голосов
/ 23 января 2019

У меня есть журнал, который выдает много текста в строке вдоль строки, которую я хочу получить.в основном он содержит что-то вроде:

bla bla bla packet 12 out of 432 bla bla

У меня есть большая команда:

tail -f log.txt |grep --line-buffered "packet" |sed -n 's/.*\(packet [0-9]* out of [0-9]*\).*/\1/p' |while read log; do echo "$(date +%F_%H:%m:%S:%N) $log" ; done 

, и я хочу перенаправить вывод в файл.

Почему >> fileне работает?Что я делаю неправильно?

1 Ответ

0 голосов
/ 25 января 2019

Причина этой проблемы в том, что команда sed хранит выходные данные в буфере.Вы избежали проблемы с синхронизацией данных для команды grep (2-й в цепочке конвейеров), используя параметр --line-buffered, а параметр -u для следующей команды piped sed поможет решить эту проблему.Команда должна быть:

tail -f log.txt | grep --line-buffered "packet" | sed -n -u 's/.*\(packet [0-9]* out of [0-9]*\).*/\1/p' | while read log; do echo "$(date +%F_%H:%m:%S:%N) $log" >> outputfile.log ; done

sed -n -u '/. (пакет [0-9] из [0-9] ). / \ 1 / p '

Вместо

sed -n' s /. (пакет [0-9] из [0-9] ). / \ 1 / p '

С этим изменением перенаправление в файл должно работать.

...